简单介绍一下云途的IIC外设,以MD系列为例:
对上图可能不是那么常用的功能做一个简单的介绍:
SMBus:由 Intel 提出的系统管理总线协议,基于 I²C 设计,但针对电源管理、硬件监控等场景增加了特定规范(如超时、数据包格式、CRC 校验等)。
时钟拉伸(Clock Stretching) :允许从机(或主机)通过主动控制 SCL(时钟线) 的时序来暂停总线通信的机制。其核心目的是让设备在需要更多时间处理数据时,能够主动“暂停”总线时钟,避免通信超时或数据丢失。
外部时钟是指做从机时,使用外部的SCL时钟;从表可知,IIC竟然能够在睡眠模式下工作
其中FF: 全部功能(Full Function)
从下图可知MD总线时钟为SLOW_BUS,Peripheral Functional Clock -> Yes,则说明该模块的外设时钟支持配置可选
补充:其中的“其他时钟Additional Clock” 对于这些模块,应用中除了 IPC 中进行合适的功能时钟选择之外,还可以根据需要在模块内部进行进一步的时钟选择。
以FlexCAN模块为例,FlexCAN 模块的时钟可以选择 FAST_BUS_CLK 或者 FXOSC_CLK,这部分的选择是在 FlexCAN 模块内部实现的。这部分是在 CAN 模块的配置结构体中实现的,外设功能时钟栏是“ - ”,即不能在YCT功能的时钟页面配置时钟
使用云途的YCT工具进行外设的时钟配置还是挺方便的,所见即所得
下面是YCT配置IIC外设介绍,需要注意的是因为i2c的接受和发送在SDK内部处理是一样的,所有只需要选择TX或者RX一个就行。
云途IIC发送数据有两套API:
1 | status_t I2C_DRV_MasterSendData(uint32_t instance, |
主要区别在于 阻塞模式 和 非阻塞模式 的实现方式:
带blocking的API使用一个 超时机制(通过 OSIF_SemaWait 等待信号量)来等待传输完成。
如果传输在指定的超时时间内未完成,则返回超时错误。
在传输完成后,释放阻塞状态并返回结果。
不带blocking的API,会立即返回,不会等待数据传输完成。用户可以通过轮询 I2C_DRV_MasterGetTransferStatus 或使用回调函数来检查传输状态
当部分器件对CLK高低点评持续时间要求较高时,可通过MCLKCFG寄存器的HIGH/LOW寄存器位(6bit)进行调整