今天回到搞模拟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线的方式,这样改过之后也成功了!几天的郁闷都散开了。好了,可以下班了。
文章评论(0条评论)
登录后参与讨论