本帖最后由 xlhmx 于 2024-2-29 19:53 编辑
AT24C02EEPROM是一种掉电后数据不丢失的存储器,常用来存储一些配置信息,在系统重新上电时就可以加载。 与之相比的是,后备域需要额外电源供电才能防止丢失。 AT24C02是一个2K bit的EEPROM存储器,使用IIC通信方式。
A0/1/2:设备地址决定引脚
WP:写保护引脚,如果接高电平,就只能读取,不能写入
SCL、SDA接上拉电阻
24C02由32页组成,每页8Byte
AT24C02通讯地址
不可编程部分:1010
可编程部分:由硬件管脚A0/A1/A2决定
数据传输方向:读数据‘1’,还是写数据‘0’
写操作地址:0xA0,读操作地址:0xA1
支持的写操作:页写、字节写
AT24C02读写时序
写操作:支持字节写模式和页写模式
字节写模式就是一个地址一个数据进行写入。
页写模式就是连续写入数据。只需要写一个地址,连续写入数据时地址会自增。但存在页的限制。超出一页时,超出数据覆盖原先写入的数据。但读会自动翻页。
读模式:支持当前地址读模式、随机地址读模式和顺序读模式
当前读模式是基于上一次读/写操作的最后位置继续读出数据。
随机地址读模式是指定地址读出数据。
顺序读模式是连续读出数据。
硬件和软件IICC对比
硬件IIC:比较复杂,速度快,较稳定,需使用特定管脚
软件IIC:操作过程比较清晰,速度较慢,稳定,任意管脚,比较灵活
IIC配置步骤
使能SCL和SDA对应时钟:__HAL_RCC_GPIOB_CLK_ENABLE()
设置GPIO工作模式:SDA开漏/SCL推挽输出模式,使用HAL_GPIO_Init初始化
编写基本信号:起始信号、停止信号、应答信号,主机:send_ack、sen_nack、wait ack
编写读和写函数:iic_read_byte、iic_send_byte,发送完成,主机释放SDA
为什么IIC总线SDA建议用开漏模式?
IIC的SDA引脚既要做为输出,又要作为输入,用开漏输出模式,很好地实现输出输入共用,避免IO模式频繁切换带来的麻烦。
输出时:主机(MCU)输出0,可以拉低信号,来实现低电平发送,主机输出1(实际不起作用),由外部上拉电阻上拉,实现高电平发送。
输入时:主机(MCU)设置输出1状态,此时由于MCU无法输出1,相当于释放MCU,此时外部器件可以主动拉低SDA引脚/释放SDA引脚,实现SDA脚的高低电平变化。
由于开漏输出模式下,MCU还是可以读取IDR状态寄存器,来获取引脚高低电平,即可获得SDA脚的高低电平状态,从而实现输入检测。
|