个人笔记_EEPROM在微控STM32F1外设IIC控制下的操作细节总结

EEPROM种类很多,基本上采用的都是IIC通信协议。具体的接口细节网上资料很多,用到的时候随便去哪个论坛都可以下载到,这里对开发的时候遇到的几个小问题做自问自答式的小总结。


自问自答:

1、IIC总线支持多个通讯主机怎么理解(支持多个通信从机好理解)?仲裁方式具体指什么?
答:IIC总线是支持在同一个总线系统中添加多个主机的,当出现冲突的时候只需要按仲裁方式处理就可以避免问题; 仲裁方式的核心实现思想是"线与"和"在发送1位数据后,比较总线上所呈现的数据与自己发送的是否一致",因为SCL和SDA都被上拉处理,所以一般没有操作的时候总线处于高电平,假设出现了两主机同时控制总线的情况,这个时候由于两台主机的SCL线的"线与"基本上同步,这个时候没有仲裁结果,只能通过SDA线的"线与"来处理,当某一台检测到某一位电平和自己的不一样就退出。同时就有两个需要注意的地方:A-这两个主机之间如果冲突的时候某一个主机同时想给另一个主机发送数据时数据也会丢失!B-两个主机发送的数据一样时SDA线的变化情况一样同样会有矛盾,这个处理机制不知道是怎么回事?《《《<疑问待大神解答,抱拳>

参考网址:http://www.cnblogs.com/wangxianzhen/archive/2013/04/09/3011140.html


2、双向串行数据线(SDA)在微控STM32中相应引脚该配置成什么模式?
答:SCL和SDA都被配置成了开漏输出模式。参考STM32中文参考手册中第111页表24可以得知该配置方法(图1)。至于是什么原理就不太清楚了,只知道"由于SDA、SCL为漏极开路结构,借助于外部的上拉电阻实现了信号的“线与”逻辑",写软件其实知道这些就够了。《《《<疑问待大神解答,抱拳>


3、连接到相同总线的IC数量受到总线的最大电容400pF限制怎么理解,(虽然一般只有一个设备)?
答:IIC设备本身有寄身电容,同时制板走线也会有电容,当总线上挂载的设备越多,电容也就越大,当电容达到一定值就会影响信号的完整性,影响方波的上下沿斜率,这个时候再通信数据就不太可靠,也就没啥意义了。(写软件就理解到这就不需要深究了)


4、从机地址可以是7位或10位 与 24C0系列存储芯片的字地址长度8-13位两个怎么理解,该处从某论坛工程中 看到(图2)?
答:答不上来!《《《<疑问待大神解答,抱拳>


5、EEPROM的地址怎么设置?
EEPROM一般会有3个bit位来区分不同的地址,共7位,高4位为1010,低3位有外部高低电平决定,所以地址理论值为0x5N,但是实际操作的时候我们通常会和读/写控制位一起发送,且先发地址,再发读写控制位,所以会有读地址和写地址两个地址,0xAN(0x5N左移1位)。根据以往工作,我在别的类型的IIC设备中也发现这个特点(一些IIC控制的数字电位计),地址的处理方式也是相同的。

6、多字节写入时怎么节省时间,提高实时性?
答:由于IIC通信协议比较简单,在一些时候如果我们的引脚不够用的时候可以用普通IO脚直接模拟,而EEPROM手册中有说明,每写一个字节需要有5-10us延时,这个我也亲自测试过,4us还可以,3us就不行了。如果我们每次写入的时候都是按字节处理的,那就无所谓了,但是如果我们是按协议处理的,假设每次存储40个,每个延时6us,那对于工程来说总是有240us的延时总是不是太好,这个时候需要有个FIFO,来在程序轮询的过程将数据丢出去。
如果我们用的是芯片的外设,根据以往前辈们的操作经验,就算是按照协议存储,也是利用硬件外设直接将一长串数据丢到外设缓冲中,至于什么时候发完我们就不需要管了,反正很快,具体能达到多快没有亲测过,如果将来工作中遇到了会进一步去测,目前没这个必要(图3)。


提示:

1、通信过程分三类:写数据、读数据、读和写数据(复合过程);

2、STM32的IIC外设可以做从机,且每个IIC外设支持两个IIC设备地址!

3、数据读写需要分页,每次最多能读写一页!




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章