GD32F4XX FT24C02A主机模式硬件IIC读写EEPROM示例

一、基本概念及特性
IIC时钟信号由主机提供,属于同步通信协议
一般硬件设计时需要对I2C SDA和SCLK均加上拉,此时保持总线空闲态为全高。
因为接收和发送共用一根数据线,所以I2C是半双工网络
其传输速度最大值为1Mbps,可以配置为400Kbps、100Kbps(标准传输速度)
因为是半双工,所以整个读写过程一般是:
主机发送通信开始信号,改变SDA和SCLK电平(先后拉低),加载传输数据(包括地址数据和传输内容),收到从机回复后,开始传输

I2C总线上最多可以挂载的从机地址数量受到总线上的总线电容限制,在100Kbps传输时不超过400pF,而速度提升后400Kbps时,总线电容不超过100pF。

IIC寻址有两种模式,7位模式和11位模式,对于EEPROM常用7位寻址

二、GD32硬件IIC与EEPROM读写:
GD32的硬件IIC比较死板,流程上主要需要严格按照几个硬件寄存器的设置来进行读写操作。
实际表现在通信流程中是半双工,读和写双向共用数据寄存器和移位寄存器。
这里仅给出8位内部存储地址和单字节读写的示例

1、初始化流程:
(1) 初始化IIC GPIO引脚
(2) 初始化IIC外设时钟
(3) 初始化配置IIC工作模式,传输速度,从机地址
(4) 使能IIC
(5) 使能ACK

2、整个字节写流程是:
(1) 等待总线空闲
(2) SCL拉低、SDA拉低,发送通信起始位
(3) 等待通信起始位状态发送完成
(4) 发送写设备地址(EEPROM是0xA0)
(5) 等待设备地址发送成功标识
(6) 清除设备地址发送成功标识
(7) 等待发送缓冲区空
(8) 发送EEPROM内部存储地址
(9) 等待字节发送成功标识
(10) 发送EEPROM存储数据(1Byte)
(11) 等待字节发送成功标识
(12) 发送总线停止信号
(13) 置位控制寄存器,停止IIC

3、字节读流程如下:
EEPROM内部会有一个地址指针,只有写操作才能对其进行移动,读操作的实质是写操作将地址指针移动到指定位置+读该位置处的
因此整体上首先是进行虚拟写操作以确定要读取的位置,接着接一个设备地址读操作,获得该地址的数据。

虚拟写:
(1) 等待总线空闲
(2) SCL拉低、SDA拉低,发送通信起始位
(3) 等待通信起始位状态发送完成
(4) 发送写设备地址(EEPROM是0xA0)
(5) 等待设备地址发送成功标识
(6) 清除设备地址发送成功标识
(7) 等待发送缓冲区空
(8) 发送EEPROM内部存储地址
(9) 等待字节发送成功标识

实际读:
(10) SCL拉低、SDA拉低,发送通信起始位
(11) 等待通信起始位状态发送完成
(12) 发送读设备地址(EEPROM是0xA1)
(13) 此时由于只读一个字节,因此读设备地址已经是本次通信的倒数第二个字节,此时需要回复NACK给IIC从机以告知对方,下个字节是最后一个字节,不需要等待主机的ACK了。
所以,这一步需要失能IIC ACK功能。
(14) 等待数据寄存器缓冲区非空
(15) 从数据寄存区缓冲区取数据
(16) 发送总线停止信号
(17) 置位,停止IIC外设
(18)为了下次通信正常,这里需要使能ACK

代码已上传至CSDN,附带全流程中文注释,欢迎下载学习,有问题也欢迎留言交流。
代码链接:https://download.csdn.net/download/qianzilu/14021032

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值