工具/软件:
您好、
我正在尝试通过读取校验和值来检查 ADC 的 I2C 配置是否正确。 我可以在 ADC 文档编写后顺利读取该值、但是、本文档不介绍如何使用什么算法来创建校验和值。
在哪里可以找到用于解码校验和值的算法?
谢谢!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:
您好、
我正在尝试通过读取校验和值来检查 ADC 的 I2C 配置是否正确。 我可以在 ADC 文档编写后顺利读取该值、但是、本文档不介绍如何使用什么算法来创建校验和值。
在哪里可以找到用于解码校验和值的算法?
谢谢!
尊敬的 Gergely:
I2C 校验和的工作原理如下:
1) 考虑校验和寄存器 (B0_P0_R126) 的当前值为 I2C_CKSUM[7:0]、这是一个 8 位值。
2) 如果我们要将值 reg_data[7:0]写入任何寄存器、校验和会更新为值 I2C_CKSUM_NEW[7:0]、如下所示:
I2C_CKSUM_NEW[7]= I2C_CKSUM[5]^ I2C_CKSUM[6]^ I2C_CKSUM[7]^ reg_data[5]^ reg_data[6]^ reg_data[7]
I2C_CKSUM_NEW[6]= I2C_CKSUM[4]^ I2C_CKSUM[5]^ I2C_CKSUM[6]^ reg_data[4]^ reg_data[5]^ reg_data[6]
I2C_CKSUM_NEW[5]= I2C_CKSUM[3]^ I2C_CKSUM[4]^ I2C_CKSUM[5]^ reg_data[3]^ reg_data[4]^ reg_data[5]
I2C_CKSUM_NEW[4]= I2C_CKSUM[2]^ I2C_CKSUM[3]^ I2C_CKSUM[4]^ reg_data[2]^ reg_data[3]^ reg_data[4]
I2C_CKSUM_NEW[3]= I2C_CKSUM[1]^ I2C_CKSUM[2]^ I2C_CKSUM[3]^ I2C_CKSUM[7]^ reg_data[1]^ reg_data[2]^ reg_data[3]^ reg_data[7]
I2C_CKSUM_NEW[2]= I2C_CKSUM[0]^ I2C_CKSUM[1]^ I2C_CKSUM[2]^ I2C_CKSUM[6]^ reg_data[0]^ reg_data[1]^ reg_data[2]^ reg_data[6]
I2C_CKSUM_NEW[1]= I2C_CKSUM[0]^ I2C_CKSUM[1]^ I2C_CKSUM[6]^ reg_data[0]^ reg_data[1]^ reg_data[6]
I2C_CKSUM_NEW[0]= I2C_CKSUM[0]^ I2C_CKSUM[6]^ I2C_CKSUM[7]^ reg_data[0]^ reg_data[6]^ reg_data[7]
其中^表示按位异或运算。
在此校验和计算中不考虑以下寄存器:
所有页的寄存器 0、即页面切换寄存器
完成软件/硬件复位后、I2C_CKSUM 寄存器恢复为默认值 0x00
谢谢。此致、
Lakhsmi Narasimhan