软件模拟的I2C,只能读到低4位,还被移到了高4位上

[复制链接]
1852|1
 楼主| donkey89 发表于 2011-6-29 10:20 | 显示全部楼层 |阅读模式
软件模拟的I2C,高4位被忽略了,只能读到低4位,还被移到了高4位上,低4位被0填充.
例如0x3A,读出来是0XA0,0XB5,读出来是0X50.
大家帮我分析一下是可能的原因是什么?
  1. uint8_t i2c_read(void)
  2. {
  3.         uint8_t rd =0;
  4.         uint8_t i;
  5.         //GPIO_Init(SDIO_PORT,SDIO_PIN,GPIO_MODE_IN_FL_NO_IT);//设置端口为输入
  6.         SDIO_HIGH;//外部上拉,所以要先设置成高,才可以读端口
  7.         nop();
  8. nop();
  9.         nop();
  10. nop();
  11.         nop();
  12.         nop();
  13. nop();
  14.         nop();
  15.         nop();
  16. nop();
  17.         nop();
  18.         nop();
  19.         for ( i=0;i<8 ;i++ )
  20.         {
  21.                 SCLK_LOW;
  22. nop();
  23.                 nop();
  24.                 nop();
  25.                 nop();
  26.                 nop();
  27.                 nop();
  28.                 nop();
  29.                 nop();
  30.                 nop();
  31.                 nop();
  32.                 nop();
  33.                 nop();
  34.                 nop();
  35.                 nop();
  36.                
  37.                        rd<<=1;
  38.                 SCLK_HIGH;
  39.                 nop();
  40.                 rd|=GPIO_ReadInputPin(SDIO_PORT,SDIO_PIN);

  41.         }
  42.         //GPIO_Init(SDIO_PORT,SDIO_PIN,GPIO_MODE_OUT_OD_HIZ_SLOW);//恢复端口为输出
  43.         return rd;
  44. }
ayb_ice 发表于 2011-6-29 10:26 | 显示全部楼层
CLK提高后多延时一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:数显ESR电容等效内阻测量仪 http://cn.digit-esr.com

241

主题

1609

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部