[分享] FRDM-KW41Z I2C调试中遇到的设备地址问题

yang_alex   2017-7-24 21:05 楼主
       有幸拿到了FRDM-KW41Z板子,准备做智能时钟。结果后来发现KW41Z512的RTC竟然仅仅是个“计数器”,并没有年月日,时分秒,定时等寄存器。

       自己不是不能做,NXP的Demo程序也有一个RTC的例子。不过我还是喜欢有硬件的RTC。既然MCU上没有,那就加一个外置的好了。由于SPI已经被LCD占用,板上还有一个SPI 存储器AT45DB041E ,KW41Z512有I2C接口,板上还有个I2C接口的FXOS8700CQ加速度和地磁传感器,所以就选I2C接口的RTC了。由于以前用过PCF8563,比较熟悉,那就它了。结果问题就此出现。

       调试FXOS8700CQ 很顺利,毕竟有NXP的参考代码在那里。接上 PCF8563   RTC模块,结果发现没反应!!!不对啊,在我以前的项目中正常的啊,找来原来的单板和代码进行测试,没错一切正常,接回FRDM-KW41Z板子就是不行,代码反复看也没毛病啊。折腾了一两天之后实在没办法,把自己压箱底吃灰的示波器找出来,查I2C总线波形。(有逻辑分析仪就更好了)结果就此发现端倪。
MAP001.BMP
地址怎么是0x44,不是0xA2。对比0x44和0xA2,0x44二进制是0100 0100, 0xA2二进制是1010 0010。看出什么东东没? 0xA2被左移了一位,所以,我先右移一位,这样,KW41Z512再左移一位后,地址就是对的了! 0xA2左移一位是 0101 0001,也就是0x051了。赶紧改代码,编译下载。OK!  RTC终于正常的读出来了。

后来仔细想想这个问题,并查看I2C总线规范,发现其实就是读写位在搞鬼,有些I2C器件地址是不包括读写位的,有些I2C器件地址是包括读写位的。在KW41Z512这里,自动加了读写位,所以地址就左移一位了。
MAP013.BMP

MAP012.BMP

.

回复评论 (2)

这个应该是正统iic了吧,飞利浦出品
So TM what......?
点赞  2017-7-24 23:24
引用: ljj3166 发表于 2017-7-24 23:24
这个应该是正统iic了吧,飞利浦出品

是啊。PCF8563是飞利浦出的啊。不是freescale的嫡系,FXOS8700CQ是freescale的嫡系。
点赞  2017-7-24 23:43
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复