一、前言
S32K144 拥有一个LPI2C(Low Power Inter-Integrated Circuit)模块,本文章将基于SDK LPI2C 例程在S32DS上介绍 LPI2C 模块多从机的使用。
二、LPI2C 模块介绍
LPI2C 支持以下 I2C 规范功能:
- 支持标准、快速、快速+ 和超快模式。
- 从机模式支持 HS(High speed mode)模式。
- 支持多主机,包括同步与仲裁。
- 时钟展宽。
- 通用调用,7 位和 10 位寻址。
- 软件复位、START 字节和设备 ID 需要软件支持。
LPI2C 主机支持以下功能:
- 命令/发送 4 字 FIFO。
- 命令 FIFO 将在启动传输之前等待空闲 I2C 总线。
- 命令 FIFO 可以启动(重复)START 和 STOP 条件以及一个或多个主接收机传输。
- STOP 条件可以从命令 FIFO 生成,或在传输 FIFO 为空时自动生成。
- 主机请求输入可以用于控制 I2C 总线发送的开始时间。
- 灵活的接收数据匹配可以在数据匹配时产生中断或者丢弃不需要的数据。
- 标志和可选中断,用以发送重复启动条件、停止条件、仲裁丢失、意外 NACK 和命令字错误的信号。
LPI2C 从机支持以下功能:
- 单独的 I2C 从机寄存器,可以做大限度地减少由主从机切换造成的软件消耗。
- 支持 7 位或 10 位寻址、地址范围、SMBus 警报和通用呼叫地址。
- 发送数据寄存器支持中断或 DMA 请求。
- 接收数据寄存器支持中断或 DMA 请求。
- 软件可控制的 ACK 或 NACK,具有 ACK/NACK 位上的可选时钟扩展。
- 可配置时钟展宽,以避免传输 FIFO 不足和接收 FIFO 超时。
- 标志和可选的数据包结束中断、STOP 条件或位错误检测。
LPI2C 框图:
LPI2C 引脚说明:
在四线模式中,SCL、SDA 引脚作为输入引脚,SCLS、SDAS 作为输出引脚。传统两线式 I2C 中,只使用 SCL、SDA 作为时钟线和数据线,SCLS、SDAS 未使用。本篇仅以两线式 I2C 为例进行介绍。
如需了解更多,可查阅 S32K-Reference Manual 文档。
三、硬件连接
本次将使用 S32K144EVB(LQFP-100) 评估板搭配 Mint Valley EVM Board 方案 Sensor 板进行演示,两者通过 Arduino 接口连接。通过 LPI2C 接口驱动彩灯以及点亮 OLED。
- Sensor 板连接说明。
彩灯使用 5V 供电,I2C 地址为 0x38。
OLED 使用 3V 供电,I2C 地址为 0x3D。
- S32K144EVB(LQFP-100) 评估板连接说明。
S32K144EVB(LQFP-100) 评估板上进行下图所示引脚的连接。
选用 PTA2 、PTA3 引脚作为 I2C 引脚,需要注意的是,J2 处原理图中有说明,此处默认 R539、R540 不接,故此处与芯片 PTA2、PTA3 引脚不连通,使用前需将此处电阻焊接上。
四、例程导入与工程配置
- 例程导入。
本文使用 S32DS 内的库函数例程 lpi2c_master_s32k144 进行介绍,打开S32 Design Studio,点击:“File”->“New”->“S32DS Project from Example”。
接着按照下图所示选择 lpi2c_master_s32k144,为了工程的区分,可修改工程名。
- IO 口配置。
在 Components 窗口中选择 pin_mux:PinSettings。
进行 SCL、SDA 引脚的配置,该例程中默认配置PTA3 、PTA2 引脚作为 I2C 的 SCL、SDA 引脚,保持默认即可。
- I2C 模块配置。
在 Components 窗口中选择 lpi2c1:lpi2c。
进行以下设置,S32K144 作为主机则设置对应多从机的地址及波特率速率,这里不设置相关的回调函数。如下图所示,进行 OLED、RGB 灯的设置。
- 生成外设代码。
点击 “Components” 窗口右上角 “Generate Processor Expert Code” 按钮,生成外设代码。
在 “Project Explorer” 中项目的 “Generated_Code” 文件夹下可以看到使用 PE 产生的代码。
五、代码编写与演示
例程主函数中主要针对时钟、Pin 脚以及 I2C 模块进行了初始化。
接着进行收发测试,如下图所示,此部分根据功能需求进行编写。
下面进行代码编写。
- 在 Components 窗口中选择 lpi2c1:lpi2c 模块进行展开,如下图所示,可看到关于 LPI2C 对应的 API,本此主要使用到 I2C 初始化、从机地址设置以及阻塞发送 API。
- 在完成时钟、Pin 脚初始化后,进行 I2C 初始化,这里一般是设置最先用到的外设,这里设置为 RGB 的配置(如第四节的第3点配置)。
- 接着根据外设时序,编写函数,发送对应数据,此处不具体说明外设驱动。
- 与新从机通讯前,需要重新设置从机地址。
- 主函数代码调用情况如下所示。
- 进行编译,编译成功后如下图所示。
- Debug 进行效果演示。
S32K144EVB(LQFP-100) 评估板与Sensor 板通过 Arduino 接口连接后,使用USB–microUSB 连接板子和电脑,连接示意图如下图所示:
接着点击小甲虫的展开按键,选择 Debug Configurations。
如下图所示,选择 OpenSDA 接口进行 Debug 设置,如下图所示。
接着进入 Debug 界面,点击 “Resume” 按键,进行 Debug。
效果如下图所示:
六、总结
关于 LPI2C 使用部分,大家可根据需要调用 LPI2C 模块相应的 API 实现相应的功能,以上就是本篇博文的全部内容,感谢阅读。
七、参考资料
[1] S32K144 Reference Manual.pdf,NXP
[2] S32K144EVB_Q100_RevB1_Schematic.pdf,NXP
[3] S32K144-EVB_QSG_REV4.3.pdf,NXP
[4] SCH - P15-094 OP-Aisa_V1.1 ( Mint Valley EVM Board 方案 Sensor 板)_Coco Ma_2016.04.19.pdf,NXP
[5] 【S32K 进阶之旅】从零开始搭建 S32K 开发环境 - 大大通(简体站) (wpgdadatong.com.cn)
评论