一,本文介绍:
小华半导体针对HC32L126 系列 MCU的 HSI2C 从机发送的标准操作流程,同时指出高速通信场景下按标准流程会出现数据发送错误的问题,给出的解决方法是在 HSI2C 模块使能后、后续操作前,预先向 STDR 写入一笔待发送数据,即可规避该问题。
二、HSI2C 从机发送标准操作流程
HSI2C 配置为从机发送模式时,需按以下 8 个步骤执行操作,各步骤需关注对应的寄存器 / 标志位:
步骤 | 操作内容 | 关键寄存器 / 标志位 | 判定条件 |
1 | 使能 I2C 模块时钟,复位 I2C 模块 | - | - |
2 | 配置 I2C 模块 SCL、SDA 管脚 | - | - |
3 | 配置从机相关寄存器 | SCR1.ADDRMODE、SCR1.TXCFG、SADDR.ADDR0 | - |
4 | 使能 I2C 模块 | SCR0.SEN | 置 1 |
5 | 检测地址匹配状态 | SSR.AVF(地址有效标志位) | 为 1,代表地址匹配 |
6 | 判断主机操作模式 | SASR.RADDR [0](地址状态寄存器位) | 为 1,代表主机读、从机发送 |
7 | 循环写入待发送数据 | SSR.TDF(可写入缓存标志位)、STDR(数据缓存) | SSR.TDF 为 1 时,向 STDR 写入数据,循环至所有数据写完 |
8 | 判定发送操作结束 | SSR.AVF、SSR.SDF(停止条件标志位) | SSR.AVF 为 0 且 SSR.SDF 为 1 |
三、不同通信速度下的执行问题
低速通信:按照上述标准操作流程执行,HSI2C 从机可正常向主机发送数据,无异常;
高速通信:若仍按标准流程操作,会出现数据发送错误的问题,核心原因是 HSI2C 通讯速度与软件操作速度不匹配。
四、高速通信下数据发送错误的解决方法
在执行标准操作流程的第 4 步(使能 I2C 模块) 后、第 5 步及后续操作前,增加一个关键操作:
查询SSR.TDF(可以写入缓存标志位) 是否为 1,为 1 表示缓存为空;
向STDR(数据缓存) 预先写入一笔待发送的数据;
完成上述操作后,再继续执行标准流程的第 5 步及后续步骤,即可避免高速通信下的数据发送错误。
关键问题
问题 1:HC32L126 系列 MCU 的 HSI2C 从机发送模式下,高速通信按标准流程操作会出现什么问题?原因是什么?
答案:会出现数据发送错误的问题;核心原因是 HSI2C 的通讯速度较快时,软件的操作速度无法匹配,导致按标准流程执行时出现数据发送异常。
问题 2:解决 HC32L126 系列 MCU HSI2C 高速通信从机发送错误的核心操作是什么?该操作需在哪个阶段执行?
答案:核心操作是预先向 STDR 数据缓存写入一笔待发送的数据;该操作需在标准流程第 4 步(使能 I2C 模块,SCR0.SEN=1)后、第 5 步(查询 SSR.AVF 标志位)及后续所有操作前执行。
问题 3:在 HSI2C 从机发送模式的标准流程中,如何判定主机为读操作、从机进入发送模式?又该如何判定整个发送操作完成?
答案:1. 读取SASR 地址状态寄存器,当SASR.RADDR [0] 的值为 1时,判定为主机读操作、从机进入发送模式;2. 当SSR.AVF 地址有效标志位为 0(已读取 SASR),且SSR.SDF 停止条件标志位为 1(检测到停止条件)时,判定整个发送操作完成。