Hi,
I would like to ask a question on GPIO’s open-drain characteristics.
Question 1
Are GPIO’s output buffer of DM6437 implemented using open-drain? It seems to me unlikely, since if each GPIO pin is open-drain, then there would require many additional pulling up registers on the board, which I haven’t found. Therefore, it seems to me that most (if not all) DM6437’s GPIO pins are implemented using standard output/input buffer.
However, I found seemingly contradictory description from
1. Page 293 of sprs345d, TMS320DM6437 Digital Media Processor
2. Page 13 of spru988b, TMS320DM643x DMP General-Purpose Input-Output (GPIO) User's Guide
(1) Attributes wired logic to output register
(2) Attributes wired logic to IN_DATA
I think (1) might be an error, because the result of wired logic should not be read from any output register, which holds output data, but should from any of the input registers which could read the common line (bus). So is (1) an error here or not?
Question 2
Another question is how should I connect GPIO pin if I intend to use them for generate I2C (or its variants) waveform? In DM6437’s I2C controller, SCL and SDA pins are open-drain, and are tied via pulling-up resistor to Vcc. But since ordinary GPIOs are not open-drain (see above), do I still need the pulling up resistor?
I think pulling-up resistors are still necessary for proper functioning of slave’s SDA pin. Since slave-SDA is open-drain, without the common line being tied to high, there is no way for slave’s SDA to control the voltage of the common line, therefore I conclude that pulling-up resistor(s) is still necessary.
The following reasoning is that: DM6437’s GPIO pins should be connected via also a resistor to Vcc. When GPIO is output (SCL clock and write), it would simply force the bus to be at the same voltage with it; When slave’s SDA sends data (ACK or register read) using its output buffer, GPIO’s direction should be set to input, both for
1) Reading the bus value (voltage)
2) Avoiding contention or current leakage when GPIO is in output and that both GPIO and SDA are in output status.
So what actually is the correct way of connection? Could anyone help on this?
Zheng