可能有点多,有点绕,麻烦进来的人耐心看下,谢谢了。我研究了好久了,没实质性的进展。先多谢了。CH453是一个16为数码管驱动芯片,然后我的主芯片是TI的DSP28335,这都是浮云。首先28335有自带的I2C程序,但是我看了下,貌似不能用。原因是CH453有点特殊。第一,28335的I2C写2个字节,第一个是代表I2C器件的地址,第二个代表是最后需要写的值。但是CH453呢,由于他是16个数码管,所以第一个数据就是对应的16个数码管的一个,当然,这个地址是16个固定的数。然后第二个数据是对应数码管的那位亮。这个我觉得不是用不了的主要原因,因为大不了弄2个变量,一个对应16个数码管的,一个对应位。重点来了,在应答位上出现了麻烦。28335的I2C,应答时SDA拉低,也就是SDA=1代表应答,但是我看了下CH453的数据手册,发现是这么写的 写操作包括以下6个步骤:输出启动信号、输出字节1、应答1、输出字节2、应答2、输出停止信号。其中,启动信号和停止信号如上所述,应答1和应答2总是固定为1,输出字节1和输出字节2各自包含8个数据位,即一个字节数据。应答位始终为1,这貌似和软件I2C不符,软件I2C应答貌似是发送低电平脉冲啊。所以我没得选择,只能硬件模拟了。但是硬件模拟的时候,SDA=1,真的能代表应答吗?比如说我在发完第一个字节后,改变主cpu的SDA为输入,等待他变成1.但是,28335的io是弱上拉的啊,在换成输入的时候他就是1啊。这根本不能反映到底是收到了CH453发过来的应答,还是自己本身就是1.反正我现在数码管亮是亮了,但是是16个全亮,而且全部管都亮同样的,当然不是我写进去的数。我想问下,有没有人碰到过类似的I2C器件,能不能给点建议。
|