我的工程里要用到iic总线扩展rom,stm32是有硬件iic的,但是,网上有很多人说这个硬件iic有漏洞,甚至于有bug。http://bbs.21ic.com/icview-184741-1-1.html http://blog.gkong.com/more.asp?name=zjcsharp&id=112878。《例说stm32》的表述是:“非常复杂,不太好用”。那么我判断这个硬件iic可能确实有不足,因此选择直接用软件模拟出iic。
在做的过程中,遇到几个问题,记录下来。
1、引脚的模式与配置
iic的两个引脚SDA与SCL都要求既能输出又能输入。这对stm32来说问题不大,由参考手册给出的图来看,引脚是始终连着IDR寄存器的,另外“输出配置”一节还特意讲到,“在开漏模式时,对输入数据寄存器的读访问可得到I/O状态”。所以,模式的问题很好解决。
SDA线是由不同的器件分时控制的,这就造成一个问题:当一个器件主动置高或者置低时,若另一个器件若发出相反的电平,会短路。
这就决定将引脚配置成推挽,有很多麻烦事。alientek就是这么做的,他在主机(单片机)控制SDA线时,将其SDA引脚配置成推挽输出;从机(EEPROM)控制SDA线时,将单片机的引脚配置成上拉/下拉输入,用频繁的配置切换来避免这个问题。
我觉得