在单片机的开发过程中,经常会使用IIC接口连接外部传感器获得相应的数据。一旦我们的IIC接口数目较多而单片机固有的 IIC接口不够的情况,这时一个单片机普通IO口模拟IIC的做法可以解决我们的尴尬。这篇博客详细的介绍STM32F103的IO口模拟IIC的详细做法。
首先,我们需要认真分析下IIC协议。
IIC协议是需要很严格的划分一个主机和从机。在实际使用过程中,通常控制器为主机,各种传感器为从机。如果是两个控制器之间采用IIC进行数据传输,那么一定要进行主从机的分配,以免因为主从机状态不确定而导致通讯不能正常。
IIC协议规定采用IIC协议进行数据的传输需要两条信号线,一条是时钟时钟信号线,也就是我们常说的SCLK,一条是数据信号线SDA。主从机之间的数据传输完全依靠这两个信号的配合。同时,只有主机才能进行时钟信号的生成,其实这样是为了防止由于时钟的导致数据不能进行传输。
在IIC协议中,从机有唯一的地址,如果从机为一个传感器,通常该地址分为两部分:第一部分为传感器固定好的高四位,第二部分为自己灵活配置的三位A0 ,A1和A2和读写确定位,通过对这三个管脚的配置可实现8个地址的分配和对从机的读写操作。具体怎么实现我们下文分析。
IIC协议是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏,至于其传送速度, 串行的8 位双向数据传输位速率在标准模式下可达100kbit/s 快速模式下可达400kbit/s 高速模式下可达 3.4Mbit/s,完全可以满足常规设计需求。
在IIC协议中,需要注意以下四点:
1、开始信号,在时钟高电平期间,数据由高变低时就是为协议开始的信号。
2、结束信号,在时钟高电平期间,数据由低变高时就是为协议结束的信号。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部1条评论
快来发表一下你的评论吧 !