本文默认读者了解I2C通信时序图
I2C接口定义了3种传输速率:
—Normal: 100Kbps
—Fast: 400Kbps
—High speed: 3.5Mbps
Prescale 预分频
时钟输入为 clk =32MHz
期望SCL = 100K
pre = 32/(5*100) KHz -1 = 63 = 0x3F
复位值 0xFFFF
Control 控制寄存器 CTR
位
7 置1使能I2C
6 置1使能中断
5:0 Reserved
只有当’ EN ‘位被设置时,核心才会响应新命令。待执行的命令结束。只有在没有传输正在进行时,即在STOP命令之后,或当命令寄存器设置了STO(停止)位时,才清除’ EN '位。当在传输期间停止时,核心可以挂起I2C总线。
复位0x00
Transmit 传输寄存器TXR
8位数据
其中第0位 在传输从机地址时 1表示从从机中读 0表示向从机中写
该寄存器可以传输从机地址,寄存器地址,数据
复位置0x00
Receive
这个没啥好说的
Command 命令寄存器CR(只写)
Bit | 功能 |
---|---|
7 | 开始传输STA |
6 | 停止传输STO |
5 | 从从机中读RD |
4 | 写WR |
3 | ACK 作为接收时,发送ACK信号0或1 |
2:1 | 保留 |
0 | 中断、设置后,清除一个挂起的中断。IACK |
传输后STA、STO、RD、WR、IACK位自动清除。
0x00
Status 状态寄存器SR(只读)
Bit | 描述 |
---|---|
7 | 表示收到从机的确认。0已接收到 |
6 | 检测总线状态 1忙 |
5 | AL仲裁 |
0 | 如果中断标志。这个位是在中断挂起时设置的,如果设置了IEN位,将导致处理器中断请求。 |
传输
一般情况下,标准通信包括四部分:
1)START信号的产生
2)Slave地址的传输
3)数据的传输
4)STOP信号的产生
流程图