1.I2c主控与从设备关系
对于写操作,主控作为transmitter,从设备作为receiver
对于读操作,主控作为receiver, 从设备作为transmitter
2.I2c控制器
2.1总框图
Pclk = 50Mhz, 经过prescaler分频,可以得到SCL。
IICSTAT:发出S(start)信号或者P(stop)信号。
Data Bus可以把数据写入IICDS寄存器,然后会自动产生SCL,并且会将8位数据从SDA同步给slave dev,
在数据发送出去后,在第9个SCL时钟,会受到slave dev的ack应答,可以通过查询IICSTAT来判断是否有ACK回应。
当slave dev回应ACK后,那么又可以继续发送数据,继续写入据到IICDS。
当主控想结束,设置IICSTAT发出P信号。
2.2 寄存器介绍
1.IICCON(用来配置i2c时钟)
Bit[7]: 对于发送模式,不需要配置ack信号,ack是接收者发送回来的应答。对于接受模式,设置成1,让它在第9个CLK发出ack讯号(拉低sda)。
Bit[6]:SCL时钟源,pclk分频即可
Bit[5]:中断使能,使用i2c时要去enable
Bit[4]:中断状态标识 表示中断有没有结束,当该bit读出来是1时,SCL被拉低表示busy,也就是i2c中断还在处理中。当i2c中断处理结束后,可以将该bit 清0,释放出SCL。
Bit[3:0]:i2c时钟分频系数配置,SCL时钟 = IICCLK/(IICCON[3:0]+1)
2.IICSTAT(配置模式,S,P信号,查询是否有ack)
bit[7:6]:模式选择
Bit[5]:当读的时候,0表示not busy,1表示busy
当写的时候,0表示写入STOP, 1表示写入START
Bit[4] : 数据输出使能,0:表示disable, 1表示enable
Bit[3]:仲裁flag
Bit[0]:表示i2c总线上的第9个时钟周期有没有ack,1表示有ack, 0表示无ack
3.IICADD(配置从机地址)
4.IICDS: (保存的是要发送或已经接收的数据)
3. 读写操作流程
The following steps must be executed before any IIC Tx/Rx operations.
1. Write own slave address on IICADD register, if needed.
2. Set IICCON register.
a) Enable interrupt
b) Define SCL period
3. Set IICSTAT to enable Serial Output
在操作tx,rx前,要先执行以下几步骤:
1.IICADD写入从设备地址
2.设置IICCON,设置时钟,使能中断
3.设置IICSTAT,使能传输
操作模式:
The S3C2440A IIC-bus interface has four operation modes:
— Master transmitter mode
— Master receive mode
— Slave transmitter mode
— Slave receive mode
①Master/Transmitter Mode
- 配置成master tx mode(也就是IICSTAT[7:6]配置成11)
- 把从设备地址写入IICDS,(第一次传输地址)
- IICSTAT写入0xF0(使能传输,发S信号,使能tx/rx)
- IICDS中配置的数据(从设备地址7bit + 读写位1bit)就被发送出去了(每传输完一个数据将产生一个中断)
- 判断第9个clk从设备是否有ack
- 如果从设备有ack,恢复i2c传输
- IICDS = buf
- Clear pending bit
- 数据被发送出去,继续i2c传输
- 如果没有ack, stop,返回错误
- IICSTAT = 0xd0
- Clear pending bit(IICCON[4])
- Delay一会儿等待停止条件生效
②Master/Receiver Mode
- 配置成master rx mode(也就是IICSTAT[7:6]配置成10)
- 把从设备地址写入IICDS,(第一次传输地址)
- IICSTAT写入0xB0(使能传输)
- IICDS中配置的数据(从设备地址7bit + 读写位1bit)就被发送出去了(每传输完一个数据将产生一个中断)
- 判断第9个clk从设备是否有ack
- 如果从设备有ack,恢复i2c传输
- Buf = IICDS
- Clear pending bit
- 数据被接受到,继续i2c传输
- 如果没有ack, stop,返回错误
- IICSTAT = 0x90
- Clear pending bit
- Delay一会儿
③Slave/Transmitter Mode
④Slave/Receiver Mode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App