I2C通信波形+规格书+软件的分析与理解
前提:首先我们也是用了很久I2C的硬件开发者了,我们熟悉的I2C有哪些特性呢?
- 比如100kHz,400kHz的常用的时钟频率,
- 又比如说在设计时按需求设置4.7k或者2.2k的上拉电阻,
- 再比如它通常是半双工,通过寻址来锁定对方,
- 最后比如它多以开漏输出以及高阻输入为主。
那我们这篇文章主要讲的是:结合多种实际传输的I2C波形,同时结合硬件软件规格书,分析理解I2C的传输协议以及如何将我们的实际波形数据转化为实际参数的方法。(适合和我一样没写过几次代码的硬件开发者)。
一、实际示波器波形与疑惑
我们拿英飞凌的TLI493D这个霍尔传感器来做案例(我实际测出来的):
图1、示波器抓取数据
这个时候我们想知道X, Y, Z轴的数据,是0XFF,0X00,还是啥?
这个时候就很烦,一共有8组数据啊,我咋知道哪个是哪个!
二、阅读规格书分析
然后我们需要看规格书了:
图2、硬件规格书数值计算
啥?还分8-bit和12-bit ?我咋知道哪个是哪个!还说有用到补码,你说气不气,我做硬件这么久都忘差不多了;当然人家规格书给了计算的表,还是挺友好的。
好吧这是软件写的,我还没问他,我先无脑用8-bit的数值试试看。
图3、第一次错误计算表格
图4、串口读到的值
然后我们软件工程师写的代码给出的值是-2,1,0 ,我计算的都是啥呀,驴头不对马嘴!
三、和软件沟通分析
接下来去问软件:“你咋写的代码”,他直接给我甩了另一个规格书,第三页给出了说明。
图5、软件规格书寄存器部分
哦~原来是12-bit的计算方法啊~
而且数据还在不同的地方,第一个数据+第五个数据前4bit = X轴的数据
Y, Z 轴数据同理
四、正确的分析和理解波形&数据
接下来我们再来看下我们示波器抓到的数据进行处理计算:
图6、按图5中的说明进行组合
图7、第二次正确计算表格
图8、串口读到的值
好好好~这下和我们的软件工程师给的输出值对上了,哈哈哈~
那我们第一个规格书里面还需要乘一个0.13呢!软件为啥没乘?如图9所示:
图9、规格书数据计算部分
我猜一猜,后面还要做运算,整数更好运算,同时我们只需要一个相对的数值就行了,不需要再乘0.13得到绝对的磁通数值;咨询软件后证实了我的想法。
五、结语与作业
总结:老家有个俗语:会者不难,难者不会。不懂的先看规格书分析,然后还不懂就问同事,别自己瞎想。
好了,又到了说再见的时候了,最后给大家布置个作业,用本篇文章案例中的芯片I2C计算方法,计算如下图片我们的设备输出值:
图9、让大家练练手的图
答案咋们评论区见~