linux 16位寄存器怎么送i2c地址,通过SerDes远端I2C接口访问16位I2C外设寄存器地址...

图2. 带有寄存器地址(I2CMETHOD = 0)时,UART和I2C之间的格式转换

对于采用16位变址寄存器的外设:

3.1. 写操作。设置I2CMETHOD = 1,按照标准GMSL UART协议产生写数据包。将16为变址寄存器地址置于数据的前2个字节,使字节的数量等于发送数据的原始数量加2.UART/I2C转换器将去掉标准写数据包中的8位寄存器地址,如图1所示。

例如,如果外设需要16位变址寄存器和8位数据,类似于:

78f2a3059e6a117d4c419d854a361aee.png

假设device_address = 0x22,index_regiSTer_address = 0x3344,及data = 0x55.主控ECU需要将数据包0x79 + 0x22 + 0x00 + 0x03 + 0x33 + 0x44 + 0x55写入UART端口,然后读取来自UART端口的ACK字节,检查写操作是否成功。

0x79为同步字节,

0x22为带有写操作指示的器件地址,

0x00为虚拟字节,可为任意值;UART/I2C转换器在转换时将其删除,

0x03为字节数量,

0x33为16位变址寄存器地址的高位字节,

0x44为16为变址寄存器地址的低位字节,

0x55为8位数据。

UART/I2C转换器之后,数据包将变为:

02ac1c8f612edef2e271035d730eb813.png

3.2. 读操作。完成写操作需要2个UART数据包,1个写数据包后跟1个读数据包。写数据包设置变址寄存器地址,读数据包读取数据。

假设外设的器件地址和变址寄存器地址相同,需要读取1个数据字节,需按以下步骤进行:

设置I2CMETHOD = 1,

ECU发送写数据包0x79 + 0x22 + 0x00 + 0x02 + 0x33 + 0x44至UART端口,

ECU从UART端口读取ACK字节,

ECU发送读数据包0x79 + 0x23 + 0x00 + 0x01至UART端口,

ECU从UART端口读取ACK字节,

然后ECU从UART端口读取数据。

对于写数据包:

0x79为同步字节,

0x22为带有写操作指示的器件地址,

0x00为虚拟字节,可为任意值;UART/I2C转换器在转换时将其删除,

0x02为字节数量,

0x33为16位变址寄存器地址的高位字节,

0x44为16位变址寄存器地址的低位字节。

对于读数据包:

0x79为同步字节,

0x23为带有读操作指示的器件地址,

0x00为虚拟字节,可为任意值;UART/I2C转换器在转换时将其删除,

0x01为字节数量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值