原创 今天回到搞模拟I2C的老路上来做了,而且也成功了

2008-11-7 19:54 2091 1 1 分类: MCU/ 嵌入式

今天回到搞模拟I2C的老路上来做了,而且也成功了:


刚开始考虑到两线做起来遇到的困难,所以改为4线,两个做为输入,两个做为输出,这样SDA和SCL各用两个I/O,一个输入一个输出接在一起,写就写输出的I/O,读就读输入的I/O,测试下来发现问题还是一样的,输出I/O正常操作,但是接入输入I/O后电平也被拉低了,这说明问题在I/O的输入模式上,经过几次尝试,把输入I/O的模式设置为推挽方式时工作就正常了:)


 GPIODirModeSet  (i2cGPIO_Port, i2cSDA, GPIO_DIR_MODE_IN);
 GPIOPadConfigSet(i2cGPIO_Port, i2cSDA, GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD);


输出当然要用开漏的模式,因为I2C器件也会拉低SCL和SDA的电平,如果我输出高电平,I2C器件ACK时拉低电平,那就造成短路了了,所以输出时要:


 GPIOPadConfigSet(i2cGPIO_Port, i2cSDA, GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_OD);
 GPIODirModeSet  (i2cGPIO_Port, i2cSDA, GPIO_DIR_MODE_OUT);


重新改之前做的模拟2线的方式,这样改过之后也成功了!几天的郁闷都散开了。好了,可以下班了。


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
1
关闭 站长推荐上一条 /1 下一条