Hi Bart

I've a college who is implementing a BitBang I2C bus driver. He has
discovered that the documentation is missing something. It does not
describe the use of CYG_I2C_BITBANG_SDA_OUTPUT. 

Setting the SDA to an output is clear. However does it have to take
care of how it is driven, ie High/Low? eg consider the code:

    // We have read the last bit. SDA is still an input, SCL is low.
    // We need to switch SDA to an output and send the ack/nak
    (*banger)(mash, CYG_I2C_BITBANG_SDA_OUTPUT);
    (*banger)(mash, nak ? CYG_I2C_BITBANG_SDA_HIGH : CYG_I2C_BITBANG_SDA_LOW);

If the last driven state of SDA was high, and nak is false, it could
be that the call for CYG_I2C_BITBANG_SDA_OUTPUT sets SDA to high, and
then the next statement puts it low again, causing a short spike. Is
this a problem? Should it first read the current state of SDA, set the
drive level and then flip it to an output?

     Thanks
        Andrew

Reply via email to