linux IIC子系统分析(一)——AT24C02 芯片简介
2019-07-13 08:38发布
生成海报
现在很多地方都有应用到eeprom存储芯片,主要是因为它现在存储空间越来越大,价格越来越便宜,我使用的mini2440开发板上贴的是AT24C02,与S3C2410的IIC相连接,为了更好的学习Linux的IIC子系统,了解IIC芯片操作方式是非常有必要的。AT24C02芯片特性和引脚功能定义直接看Datasheet就可以了。我只关注设备地址和操作方式,我们实际应用中知道这些就可以操作它了。
1.AT24C02 地址
前四位(1010)是固定的,A2, A1, A0 与硬件连接有关系,外部输入电压为高时是1,外部电压输入为低是0。 我开发板中A2, A1, A0都是接地,所以我的设备地址是10100000 或10100001。 最后一位R/W是读写位,读操作时为0,写操作时为1。对于linux IIC之系统,读写位驱动会自动添加,实际设备地址位高七位 1010000B 也就是0x50。
2.AT24C02写操作写操作分为一个字节写和分页写,时序如下图。
一个字节写时序:发送开始信号->发送设备地址->等待ACK->发送需要写入的地址->等待ACK->发送需要写入的数值->等待ACK->发送停止信号。分页写时序与写一个字节基本相同,只是在发送第一个需要写入的数据之后不发送停止信号,继续发送数据,直到数据发送完之后再发停止信号。这里需要特别注意EEPROM的页操作,在24C02中,存储空间是2048bit = 256*8bit = 256 Byte, 其中它被分为32页,每页8Byte。在进行页操作的时候,WORD ADDRESS的低三位用来表示页内的地址,其它所有高位表示页地址。比如WORD ADDRESS = 1001B,表示第1页的第一个地址。现在如果往1001B的存储地址写入8个数值:1,2,3,4,5,6,7,8 ,当写到数值7时,第一页已经写满,那么8会被写到第一页的0地址位置。这时会把第一页0位置的信息被覆盖。
3.AT24C02读操作。读操作分为:从当前地址读;随机地址读;连续地址读;
解析:当前地址读:24c02内部的data word address 会保存上次读或是写的存储地址,当执行当前地址读时,读取的是data word address counter + 1地址上的指。这里需要主要,在页尾时会出现地址翻转,实际会读取到该页的第一个字节数据。与上面提到的也写操作中的一样。data word address 中保存的值掉电就会丢失。
随机地址读取:注意上图Figure11 中的Dummy Write。随机读实际上是通过写入一个地址改变eeprom里面data word address 的值,然后再进行当前地址读。
连续读:连续读由当前地址读和随机地址读启动,只要给eeprom 一个应答信号,他的data word address 就会增加,主控器就可以继续读数据,直到data word address 增加到一个页的末尾后,又回到该页的起始位置地址。当接收到IIC的停止信号的时候结束传输。
最后eeprom 还有一个WP 控制引脚。该引脚为低电平的时候,可以正常的读写数据。当该引脚为高电平的时候。eeprom进入写保护模式。这时数据是写不进去的。
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮