I have started to work on a software I2C slave driven by interrupts on the SDA and SCL lines. At the moment I have been playing with this dev board http://wiki.stm32duino.com/index.php?title=Blue_Pill that uses a STM32F103C8 chip and just programming with Ardunio IDE but not using any of the Ardunio high level function but rather writing to the registers to control the pins and interrupts.
At some stage I will need to port it to the same chip as OpenMV uses and also a compatible programming environment. What programming environment do you use to write the firmware with??
I have got a basic software I2C slave working on my STM32F1 dev board. It uses a interrupt on the SDA line to detect the start of a transmission from master and interrupt the main program.
It doesn’t have a timeout watch dog so this needs to be added still.
Also at the moment the master can only read or write 1 byte per transmission atm so I still need to add doing larger tansmissions
OK I have my I2C slave now that master can read or write up to 256 bytes in 1 transmission, I have also made a timeout on it so that it can’t get stuck and will always return to main program if stuck in a loop.
Cool, what are the mods to do this? Do you think you can sumbit a PR to MicroPython to enable this functionality for everyone?
Um, so, the machine module doesn’t use the hardware I2C bus but instead does I2C using software. So, it should be possible to modify that module to work using an external interrupt and your code.
See it here:
Maybe only minimal changes to the C code need to be made and then the rest can be in python.