AUTOSAR之I2C驱动

I2C的工作原理

I2C(Inter-Integrated Circuit)通信由两根线构成,分别为SDA(数据线),SCL(时钟线),它是一种常见的片上外设通信方式。
AUTOSAR之I2C驱动_第1张图片
这里可以简单的记忆,只有当SCL为高电平时是有效状态
-SCL=1, SDA由高变低时,I2C START。
-启动信号是一种电平跳变时序信号,而不是一个电平信号。

-SCL=1, SDA由低变高时,I2C STOP
-停止信号也是一种电平跳变时序信号,而不是一个电平信号。

EB配置

驱动

利用MCAL配置好I2C后,需要写出I2C读写驱动,笔者这里修改了驱动接口,这里就不放具体代码实现,读写驱动思路可进行参考。

I2C_Write写操作

对于写操作,报文格式如下所示:
AUTOSAR之I2C驱动_第2张图片

当发送了START信号后,MASTER首先会发送1byte数据(包括7bits从设备地址+1bit R/W。
这里注意,从设备的地址为7bit,需要左移一位给R/W位留出位置
笔者在实验过程中,使用的从设备为0x08,左移后为0x10。
DEVICE ADDRESS:从设备地址7bit
WORD ADDRESS:对应寄存器的地址8bits
DATA:待传输的数据8bits

这里注意,ACK信号对SDA的控制权与数据传送方向相反,即对于写操作而言,MASTER每发送8bits数据,SLAVE会反馈一个ACK应答,若没有ACK或者反馈NACK,传送会延迟或中断。

I2C_Read读操作

对于读操作,相比写操作复杂一些,存在一个Dummy
write(空读)的过程。在读取从设备相关寄存器之前,需要先向从设备发送一数据帧(指明从设备地址和需要读取的寄存器地址),这一过程是为了确保从设备了解主设备要读取哪一寄存器,并返回ACK应答。随后即可设置1byte buffer来存放寄存器的值。

AUTOSAR之I2C驱动_第3张图片

对于PF8200芯片,供应商提供了如下文件:

pf82.h提供了函数的接口声明和枚举变量的定义。

pmic_pf8x_map.h提供了pf8200各寄存器的地址,注意,存在部分寄存器没有包含在此文件中,例如OTP(one time program)相关寄存器。

pf8200.c中定义了pf8200相应寄存器的读/写函数,本质就是利用上文定义的I2C读写接口对相应寄存器进行操作。(后续如果修改了I2C_TX/RX接口,这里也要修改接口)

PF8200重点寄存器说明

◼SWx/LDOx_ ILIM/OV/UV_INT

用来报错,一旦SWx或LDOx通道中发生了ILIM(限流)OV(过压)UV(欠压)的故障,其相应的INT就会置位为1。可用于单独检测某一通道的某一类型故障。

◼SWx/LDOx_ ILIM/OV/UV_STATE

用来配置当该路输出发生此种错误后,是继续保持上电,还是立刻发生掉电,当该bit=1时,电源会保持高。当bit=0时,电源会因此错误关闭。这些bits默认值都是1.其中过流的检测时间为1ms。当监测到过流,如果设置为因为过流会关闭该路电源,则监测到过流时,该路电源就会关闭。对于OV、UV的错误监测,OV_DB和UV_DB是监测电源过压和欠压的最小时间。默认的过压和欠压的最小时间都是25us。如果监测的过压或者欠压的时候,如果该错误持续300us,该路电源会按照最初的设置选择关闭

◼ ILIM/OV/UV _BYPASS

用来关闭某路的电源监测功能,当为1时,该路的错误监测将被屏蔽,为0时,监测功能保持。屏蔽的监测功能包括:

a) 增加错误计数器(FAULT_CNT)

b) 开始错误计时(TIMER_FAULT)

c) _State 功能,即监测到错误发生,自动关闭

d) OV、UV引起PGOOD的置

◼ SWx_FLT_REN / LDOx_FLT_REN

这个bit是用来配置当每路输出监测到错误后如果发生关闭,如果错误清楚,该路电源是否恢复,如果是1,则会自动恢复,如果是0,则会一直置低,直到MCU通过I2C再将其打开。

你可能感兴趣的:(汽车电子,C语言)