Hi,
We are developing a product in which there are up to 10 MSP430F5308 boards connected as slaves on a single I2C bus. The I2C master is a STM32F207 ARM MCU. Every MSP slave board has an I2C repeater on it, so effectively there is a repeater before every slave on the bus. The firmware for the MSP is developed in C using CCSv5. The I2C slave initialization and I2C ISR is same as given in the example programs of CCS.
Now the problem we are facing is that suddenly in the middle of communication (it occurs very randomly, no fixed pattern / time) the master begins to see the I2C bus busy (the busy bit in the STM becomes set). From this point onwards the STM32 does not begin any I2C transfer since it will not do so if the busy bit is set. Naturally the slave will also not receive anything and hence it becomes a deadlock.
Now comes the strange part. Our initial assumption was that STM32 I2C peripheral / code might be causing this issue. But during debugging, we did a hardware reset of the STM32 MCU, while not touch the MSP slaves. This caused the STM32 to reset and begin program execution from the begining, yet again it saw the bus busy and did no communication. Now when we reset the slaves, keeping the STM32 untouched, it does not see the bus busy anymore and starts communication.
Our problem is that we are not able to figure out what exactly is happening during communication that the STM32 starts seeing the bus busy. Also we are not able to figure out if it is a firmware / hardware issue. If things dont get sorted out soon, the company would take a decision to replace the I2C bus with a much more expensive but robust CAN and replace MSP slaves with some other microcontroller with built in CAN (preferably other STM part).
Can someone in the forum shed some light on the issue. Has anyone seen similar behaviour before?
Thanks in advance!
- Mayuresh