IIC数据传输波形解析

本文详细介绍了嵌入式系统中使用eeprom(如AT24C256)的存储方案,包括IIC通信的地址设置、写入过程(使用模拟IIC的注意事项)、等待写入方法以及读取操作,包括立即读取和随机读取的区别。作者还承诺后续将讨论SPIFLASH的相关内容。
摘要由CSDN通过智能技术生成

1.背景

嵌入式领域里存储方案比较多,nand flash,spi flash,sd卡,emmc,这些存储方案的特点都在于写入前都要先擦除扇区,比较麻烦,eeprom可以不用而且可以按字节写入和读取,这就比较香了。至于iic通信协议就不在这里过多介绍了,网上都有非常详细的解析,如果需要我可以再开一个新坑,当然在这篇文章里大家也可以大概了解iic通信过程。

2.器件地址

406356bb60884a70bffc1ab39a4a8c2f.png

35f3af29c1044b57b5d8509fa9547c5c.png

iic的地址只有7位和10位之分,而AT24C256的前几位是固定的10100而后两位是A0和A1来决定一般而言是接地,即00,所以地址就是0x50

3c28afb8c1de42f497b3442cf7c87931.png

3.写入

d3c0edb2d2254ed7bfd184cf15762d6a.png

0008aea7abca4c64ae582edbc7260a15.png

这是完整的的一个写入的波形

我们从开头看起

51d0702a461d43559cb8e072713fab98.png

开始信号,没啥好说的

24b276bfee4e444dbc3eb10d935c9d5a.png

前几位是固定1010正如手册上所说的

5ead06e8ba6e4ad6b4a4c133cb944304.png

A0~A2都是接地所以是000

d20f459e489b4dd7a3506c2b3adaab80.png

组成的器件地址就是0x50

那最后一位是啥?读写判断位

因为大家用的都是STM32的模拟IIC所以网上的地址都是默认A0,A1,其实完全不对,后来我用NXP,TI等芯片的硬件IIC套进这些地址完全没有应答

353d846cdeaf4ce58751804dc31ef4ba.png

4bfa7171f1134fd9b7ff89afb89459f7.png

标准的地址都是0x50,而最后一位都是程序来控制的读写位,而非地址,这也就解释了为啥逻辑分析仪为啥认为器件地址0x50

05b34bd06e004e43ae8eddd32345468d.png

之后就是标准的等待从机应答。

e2bf31d632da421aa78047ccdc7dad0d.png

在器件地址发送完毕后就是发送写入地址,在小容量的存储芯片比如AT24C02之类的只需要一个地址,而在大容量的AT24C256等需要两个,由高低两个地址共同组成一个完整的地址位。

6962398de3464bfbb0ac53ee6b9d1003.png

之后就是写入的过程了。这里没啥好讲的了。

4.等待写入

在完成写入后需要等待器件写入完成,其中由两种方法

4.1方法1

f7be8f9d3a934282aaf840e6c9da8dce.png

向器件一直发送读取命令,但是由于器件没有完成写入过程,所以会一直没有应答

67817fc26abf45ec9dd922db55f99a0d.png

当器件从无应答(NACK)变为应答(ACK)后即表示完成写入,便可进行下一步操作了

4.2方法二

a9dc198e60a94883af4772c799e5abed.png

我们从AT24C的器件手册上可知写入时间大概5ms~10ms,我们通过延迟等待的方法进行操作

945facc2c17345479e86d92a8e13f812.png

正如手册上所说这次我大概等了5ms即完成了写入

5.读取

手册上给出了两种读取方式

910be7dd78ef4b839759c20dbcf38c89.png

立即读取和随机读取,立即读取没啥意思,就是写入就读,读取你写入的内容,实际情况下没人会这样干。还有一种是随机读取,比较常见,这里我就介绍这种了。

3b4dec7a5e104aceb0543e66885b6127.png

这时一是标准的读取过程

我们需要拆成两部分来看

ab43be550106462faab05c7ef34670e7.png

第一部分是写,过程与写的过程一致,但是没有数据

61f06b3e2613478cbc7b65d9d1650613.png

手册上给的是欺骗写,就是说不用实际写入数据,但是这里地址就是我们要实际读取的地址。

ab9758d82f884fa684f3b915b44576a9.png

在完成写后我们需要再发出一个开始信号,注意不要发送停止信号。

然后发出器件地址

509882cbcd904dada54b5b48768230af.png

主要关注这里最低位要置1表示读信号

ec6f8befa3184f1ba91e50175a5589cc.png

我这里放出写入的情况大家作对比

7c8dbd4fbf4044098ad03df52e30cdff.png

后面就是读取数据,这里长度是程序控制的

41a8abd89d08485b8f218bf4e46fc2ca.png

额外注意一点就是最后一个数据是没有应答的。

169910d9c5554fbf82e2906adba77c6e.png

手册上也是这样写的。

6.结语

上述的两个过程就是EEPROM的常用操作,大家如果还有疑问写在下面的评论区,我也会尽力解答,关于SPI FLASH我后面也会开一篇来解读。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值