1.背景
在嵌入式领域里存储方案比较多,nand flash,spi flash,sd卡,emmc,这些存储方案的特点都在于写入前都要先擦除扇区,比较麻烦,eeprom可以不用而且可以按字节写入和读取,这就比较香了。至于iic通信协议就不在这里过多介绍了,网上都有非常详细的解析,如果需要我可以再开一个新坑,当然在这篇文章里大家也可以大概了解iic通信过程。
2.器件地址
iic的地址只有7位和10位之分,而AT24C256的前几位是固定的10100而后两位是A0和A1来决定一般而言是接地,即00,所以地址就是0x50
3.写入
这是完整的的一个写入的波形
我们从开头看起
开始信号,没啥好说的
前几位是固定1010正如手册上所说的
A0~A2都是接地所以是000
组成的器件地址就是0x50
那最后一位是啥?读写判断位
因为大家用的都是STM32的模拟IIC所以网上的地址都是默认A0,A1,其实完全不对,后来我用NXP,TI等芯片的硬件IIC套进这些地址完全没有应答
标准的地址都是0x50,而最后一位都是程序来控制的读写位,而非地址,这也就解释了为啥逻辑分析仪为啥认为器件地址0x50
之后就是标准的等待从机应答。
在器件地址发送完毕后就是发送写入地址,在小容量的存储芯片比如AT24C02之类的只需要一个地址,而在大容量的AT24C256等需要两个,由高低两个地址共同组成一个完整的地址位。
之后就是写入的过程了。这里没啥好讲的了。
4.等待写入
在完成写入后需要等待器件写入完成,其中由两种方法
4.1方法1
向器件一直发送读取命令,但是由于器件没有完成写入过程,所以会一直没有应答
当器件从无应答(NACK)变为应答(ACK)后即表示完成写入,便可进行下一步操作了
4.2方法二
我们从AT24C的器件手册上可知写入时间大概5ms~10ms,我们通过延迟等待的方法进行操作
正如手册上所说这次我大概等了5ms即完成了写入
5.读取
手册上给出了两种读取方式
立即读取和随机读取,立即读取没啥意思,就是写入就读,读取你写入的内容,实际情况下没人会这样干。还有一种是随机读取,比较常见,这里我就介绍这种了。
这时一是标准的读取过程
我们需要拆成两部分来看
第一部分是写,过程与写的过程一致,但是没有数据
手册上给的是欺骗写,就是说不用实际写入数据,但是这里地址就是我们要实际读取的地址。
在完成写后我们需要再发出一个开始信号,注意不要发送停止信号。
然后发出器件地址
主要关注这里最低位要置1表示读信号
我这里放出写入的情况大家作对比
后面就是读取数据,这里长度是程序控制的
额外注意一点就是最后一个数据是没有应答的。
手册上也是这样写的。
6.结语
上述的两个过程就是EEPROM的常用操作,大家如果还有疑问写在下面的评论区,我也会尽力解答,关于SPI FLASH我后面也会开一篇来解读。