项目场景:
项目需求里面要求输出IO比较多,所以用上CAT9555来扩展芯片,芯片介绍如下
端口命令字节
根据资料,项目中我只用到输出IO,那么我只需要用到这几个寄存器。
问题描述
造孽啊,按照芯片手册文档说明,写入地址位,前面四个bit位是固定地址,后面A0,A1,A2作为硬件的IP地址,那么如果我地址为0,那么就是0x40,是这个数据没错的吧!!!
根据ZYNQ里面给的例程demo
然后我再删掉一些不想要的东西,初始化程序如下
数据发送
这个IIC_SLAVE_CIOUT_ADDR等于0x40理论上肯定可以的是吧,但是就是死活无法通讯,只能上示波器了。
原因分析:
我根据资料给的demo,直接写入0x40看着也是对的
资料上的示波器图片我也是深信不疑
后来发现仔细再看一下文档,才发现人家4+3=7,不是8位字节,
解决方案:
拿示波器抓取波形的时候,发现我这发的数据,地址位其实只有7个时钟,也就是7个bit,就是说我其实应该不是0x40,应该要>>一个地址位,#define IIC_SLAVE_CIOUT_ADDR 0x20
验证,哟,我的IO亮了!!!大功告成!!!