STM32-IIC模拟从模式

这里是讲的模拟IIC,不是采用硬件IIC。为啥用软件模拟IIC而不用硬件IIC? 除了ST的IIC模块本身问题,还因为硬件IIC移植不方便,在不同的MCU中无法通用;而且有的项目需要在IIC主从模式切换。

网上的资料大部分都是模拟IIC主模式的,很少有资料告诉我怎么实现模拟IIC从模式。

因为特殊要求,我们在做汽车电容屏升级的时候,要扔掉原车屏的一个部件,即IIC从机部分,只保留IIC主芯片,并采用STM32替代被扔掉的IIC从机功能,而且在不同应用内容下,需要切换IIC的主从工作模式。

要实现IIC从机功能,最核心的部分就是如何精确的抓住IIC_SCL,也就是IIC主机发出来的时钟信号。只有抓住精确的时钟SCL,才能正确的读取到SDA的数据,才能真正模拟出IIC时序。

但是要抓住SCL信号可不容易,IIC最高速度有400K,最小有效脉宽达到1.4us(数字0/1),最小脉冲是0.8us(应答和STOP信号产生的尖刺),采用中断来识别SCL是不可能的做到的,因为即使在最高主频72MHZ情况下,STM32最小指令周期是1/72(us),从SCL中断发生到STM32进入中断响应,至少要要40个指令周期,也就是40/72(us),加上堆栈操作及变量,很可能已经错过了SCL信号。


图1.高速模式下IIC波形


图2 应答和STOP信号产生的尖刺

所以只能采用查询方式来识别SCL,而到目前为止,我还没有看到哪篇文章是采用查询SCL的方式来模拟IIC从模式。

所以很多文章说模拟IIC从模式的内容都是假的,要么骗人要么就是从来没有实践过。

写这篇文章,就是想提醒很多跟我一样的人,不要老是拷贝别人的程序,以为改改就行了的,这样的想法肯定是会吃苦头的;

越是简单的事情,越是要多花时间来理顺,因为这是大厦的基石;

这是花了好多时间走了很多弯路,很愤怒差点被带沟里的博主,写于20160711。

猜你喜欢

转载自blog.csdn.net/triv2009/article/details/51898987
今日推荐