硬件实现I2C协议 (主机传输)
- 设备默认是
Slave, 某个设备产生一个Start, 就成了Master.
- 检查总线是否空闲:
SR2->BUSY == 0继续; - 生成
Start信号; - 检查是否
Start成功:SR1->SB == 1继续.
Master广播地址 (8 bit):7 bit地址 +1 bit模式 (LSB, \(R / \bar{W}\)).
- 广播地址,无需检查
SR1->TxE(此时仍为0); - 检查是否有从机回应 (地址匹配):
SR1->ADDR == 1继续 (地址匹配的从机). 此时,SR1->TxE为1,SR1->BTF为0(第一次传输数据为地址, 不会改变BTF); - 先后访问
SR1和SR2, 清零SR1->ADDR; 否则, 之后传输了非地址数据, 也不会将SR1->BTF置一.
- 传输数据
- 检查数据寄存器是否为空:
SR1->TxE == 1继续; - 写入数据;
- 如果需要连续传输数据, 重复上两步;
- 确保最后一个字节也发送成功 (可在结束通讯前判断):
SR1->BTF == 1继续.
- 产生
Stop信号, 结束通讯
- 检查传输是否完成 (最后一个字节也传输完成):
SR1->BTF == 1继续; - 如果仅传输了地址, 未传输过非地址数据,
SR1->BTF仍为0, 无需检查; - 生成
Stop信号.
END
浙公网安备 33010602011771号