• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

模拟iic,读写24C02,能读不能写。。。灵动F103

花生大事 2016-12-06 浏览量:1460
收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 沒唷,只要各一個Slave的ACK就好,所以驅動發送地址後幾行

    IIC_Send_Byte(DataToWrite);     //发送字节   
    IIC_Wait_Ack();         
    IIC_Stop();//产生一个停止条件 
    跟時序上是吻合的,另外我不知道您怎驗證讀是成功的? 因為器件上可能值就是0,以為讀取正常,以上

    • 发布于 2016-12-07
    • 举报
    • 评论 3
    • 1
    • 0
花生大事 回复了 MOP:验证成功就是哪官方的例程往里面下载,我用自己IIC模拟读,如果读出来和用官方下载的数一致,就说明对了,反之则不对。。。 回复
MOP 回复了 花生大事:用自己IIC2模擬讀,是說上面那些源碼嗎? 不是幾乎跟官方函式庫一樣? 所以意思是說官方範例您下載到板子之後讀寫是正常的囉? 回复
花生大事 回复了 MOP:灵动官方用的是硬件IIC,上面的代码是我用的模拟IIC。。。 回复

其他答案 数量:6
  • 写的时序不对吧。

    写不进,如何确定读不出。一般都是写入一个值再读出来,看是不是一样。

    你是不是读出的都是FF,这不能判断是不是读出来,因为I2C上本来就是上拉的。

    • 发布于2016-12-06
    • 举报
    • 评论 1
    • 1
    • 0
花生大事 回复了 汉云 :我先用例程硬件的IIC写入前几个数,然后自己模拟iic读写,这样判断的,读出相应地址的能读对,但是就是不能写入。。。 回复

  • 你挂个示波器看你sda,scl的时序对不对啊。。应答有没有啊。。然后单步走啊。。看是不是有应答没有,很容易就找到问题了
    • 发布于2016-12-08
    • 举报
    • 评论 0
    • 1
    • 0

  • 驅動上應該沒問題,您要不要放您的User Code的部分(ex: main.c)

    • 发布于2016-12-06
    • 举报
    • 评论 1
    • 0
    • 0
花生大事 回复了 MOP :int main(void) { unsigned char chI2c_rdata[]={0,0,0,0,0,0,0,0}; u8 j; delay_init(); uart_initwBaudRate(9600); IIC_Init(); printf("i2c test start ...\r\n"); delay_ms(500); WriteCmd(0x01); delay_ms(500); AT24CXX_Read(0,chI2c_rdata,8); delay_ms(200); for(j=0;j<8;j++) { printf("Rx[%d]: %x \r\n", j,chI2c_rdata[j]); } printf("i2c test over ...\r\n"); while(1); } 回复

  • 主函数

    int main(void)
    {
    unsigned char chI2c_rdata[]={0,0,0,0,0,0,0,0};
    u8 j;
    delay_init();
      uart_initwBaudRate(9600);
    IIC_Init();
    printf("i2c test start ...\r\n"); 
      
    AT24CXX_WriteOneByte(0x01,0x0a);

    delay_ms(500);
      AT24CXX_Read(0,chI2c_rdata,8);
    delay_ms(200);
      for(j=0;j<8;j++)
      { 
    printf("Rx[%d]: %x \r\n", j,chI2c_rdata[j]);
      }
    printf("i2c test over ...\r\n"); 
    while(1);
    }




    • 发布于2016-12-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 您的Code,沒有先檢查EEPROM是否正常?

    用以下函式

    u8 AT24CXX_Check(void)
    然後才能斷定是哪個問題

    • 发布于2016-12-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 您的Code,沒有先檢查EEPROM是否正常?

    用以下函式

    u8 AT24CXX_Check(void)
    然後才能斷定是哪個問題

    • 发布于2016-12-06
    • 举报
    • 评论 5
    • 0
    • 0
花生大事 回复了 MOP :写不进去。。。 回复
花生大事 回复了 MOP :这个检查函数也是先写入在读出对比,但是调用的写入函数根本写不进去。。。 回复
MOP 回复了 MOP :所以Check是return Fail了? 那可能是器件有損壞了 回复
MOP 回复了 花生大事 :我也是用官方函式庫,沒問題 回复
花生大事 回复了 MOP :如果没有应答信号是不是会出现不能写入问题,我看24c02要求写入结束的时候必须有应答信号,再stop,是不是没有应答就会写入不成功 回复

相关问题

问题达人换一批

模拟iic,读写24C02,能读不能写。。。灵动F103