EB tresos 配置I2c - 实现与PF8200的读写操作

发布时间:2023年12月26日


前言

最近领导要求I2c从软件模拟实现变更为硬件I2c实现。但是网上一搜索全是要钱的。心有不甘于是我自己小研了一下,也实现了,没啥大难点!!!
IIC实现方式一般有两种:
①, 基于硬件实现IIC通信(硬件GPIO引脚配置为I2c复用引脚)
②, 基于软件模拟IO实现IIC通信(代码控制SDA和SCL两个IO引脚的电平来模拟IIC时序)

本文章基于64pin的恩智浦 S32K146型号的芯片作为主机,从机是NXP的供电芯片PMIC(PF8200)
在本次实验中,我们将以使用EB工具链来配置硬件IIC通信。

具体实现流程包括如下几点:
1, EB配置 2, 代码编写 3, 测试验证

在这里插入图片描述

话不多说,走你~

一、EB工具链配置

1、I2c模块

1)新建模块

在EB工具中,新建I2c模块。如下图:
在这里插入图片描述

2)配置General

在这里插入图片描述①, 在AutoSar的配置工具中,常常看见PostBuild、Precompile、Linktime这三个影子。具体描述可以参考下面这篇博客。
链接地址

②, 开发者错误检测,常用于开发调试时候,当模块运行是出现了错误,会通过DET模块报错并使栈指针定位了DET模块的报错函数,可查看IIC出现了什么故障类型并进行维护。一般在软件释放时,应该取消该选项。

③, 是否使用DMA传输功能,勾选之后应该在MCL模块进行配置DMA通道。图片上我虽然勾选了,实际上并没有在MCL进行配置。用户可根据需求在选择。

④, 定义Timeout定时器。

3)配置I2cChannel

在这里插入图片描述
I2cChannelId:0
I2cHwChannel:LPI2C_0
I2cMasterSlaveConfiguration:MASTER_MODE(MCU配置为主机模式)
I2cOperatingMode:LPI2C_STANDARD_MODE(标准模式,通信频率100khz)

在这里插入图片描述

①: 选择MCU模块配置好的时钟源(选择SIRC时钟源)
在这里插入图片描述

②: 选择IIC使用中断模式
③④ 两步骤都是为了配置出I2c的波特率100Kh。芯片手册有描述,如下图。详情见芯片手册。
在这里插入图片描述

2、Port模块

1)配置SDA

在这里插入图片描述

2)配置SCL

在这里插入图片描述
到此为止EB配置工作已经完成了,生成I2c,Port相关的代码文件。并集成到工程中。 MCAL的IIC静态代码I2c_TS_T40D2M10I1R0SW32K1_RTD_4.4_1.0.1中复制到工程中。

~

二、代码分析

从机设备地址:0x10
从机设备ID:0x48
从机设备ID寄存器:0x00
任务目标:通过使用I2c读取从机的设备ID号。带CRC校验功能的IIC读写操作。

I2c模块的读写操作共同使用同一个函数接口:

Std_ReturnType I2c_SyncTransmit(uint8 Channel, const I2c_RequestType * RequestPtr)

重点解析第二个形参,I2c配置结构体变量。
在这里插入图片描述

1、申明一个I2c配置结构体数组,用于I2c所有读操作。

在这里插入图片描述
从机地址0x10必须向右移位1bit 0x10 >> 1u(0x08u)
结构体数组中的第一个成员用于写从机地址和寄存器地址,实现与从机建立握手。
结构体数组中的第二个成员用于读取寄存器的数据,并存储在ReadDataBuf中。

2、搭建读操作函数

I2c读寄存器数据通用接口,读取任何寄存器的数据,可以通过调用该接口
在这里插入图片描述
读PMIC设备地址的函数:
在这里插入图片描述

~
到此,代码编写就结束了,编译进行验证结果

三、测试验证

参考PF 8200的数据手册可知,读取寄存器数据的时序如下图
在这里插入图片描述
串口打印信息:
在这里插入图片描述
示波器测试数据:
在这里插入图片描述
Tips:
上图中,SDA有三条细细的上升波形。目前原因还未找到。都是在MCU收到从机的响应位之后产生的,并未对MCU采集数据产生影响。如果有谁也遇到过这情况并解决了,可以分享以下哈!

~

总结

写操作比较简单,只需要申明一个I2c配置结构体变量即可。
博主是AutoSar小白,刚开始接触NXP芯片,如果哪里表达的有问题,还请大佬们指点指点哈。接下来,让我们在后面的博文再相会哈~

文章来源:https://blog.csdn.net/weixin_48498880/article/details/135214262
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。