软件模拟的I2C,高4位被忽略了,只能读到低4位,还被移到了高4位上,低4位被0填充.
例如0x3A,读出来是0XA0,0XB5,读出来是0X50.
大家帮我分析一下是可能的原因是什么?
- uint8_t i2c_read(void)
- {
- uint8_t rd =0;
- uint8_t i;
- //GPIO_Init(SDIO_PORT,SDIO_PIN,GPIO_MODE_IN_FL_NO_IT);//设置端口为输入
- SDIO_HIGH;//外部上拉,所以要先设置成高,才可以读端口
- nop();
- nop();
- nop();
- nop();
- nop();
- nop();
- nop();
- nop();
- nop();
- nop();
- nop();
- nop();
- for ( i=0;i<8 ;i++ )
- {
- SCLK_LOW;
- nop();
- nop();
- nop();
- nop();
- nop();
- nop();
- nop();
- nop();
- nop();
- nop();
- nop();
- nop();
- nop();
- nop();
-
- rd<<=1;
- SCLK_HIGH;
- nop();
- rd|=GPIO_ReadInputPin(SDIO_PORT,SDIO_PIN);
- }
- //GPIO_Init(SDIO_PORT,SDIO_PIN,GPIO_MODE_OUT_OD_HIZ_SLOW);//恢复端口为输出
- return rd;
- }
|