Raspberry Pi I2C clock-stretching problem

The I2C slave that I'm developing has been failing intermittently.  I finally noticed this was a known bug in Raspberry Pi that mishandles clock stretching. I2C slave may delay response by holding SCL low.  However, when the slave does it, the I2C master in Raspberry Pi gives very short clock for the first bit of the next byte.  The symptom can be seen as following picture. More detail explanation can be read in this link: http://www.advamation.com/knowhow/raspberrypi/rpi-i2c-bug.html In order to workaround this, I set data rate in I2C slave module higher.  The communication rate is 400 kbps, but I set the data rate 1000 kbps.  It worked for me.  Here is…

SPI / RX collision test

Done collision test between SPI and RX in the comm driver.  The driver would receive RX signal any time, even while the host processor is accessing the driver via SPI to send or retrieve data.  Currently, the serial RX is handled in external input interrupt handler, so any bug in RX handler may break registers (i.e., states) for SPI communication.  I actually saw those bugs several times.  The bugs are fixed now and load test has passed.  In the test, the load generator keeps sending data via serial channel.  I've changed the timing of data retrieval in the host of the receiver so that SPI / RX collisions frequently happen. …