找回密码
 立即注册
楼主: z9051638

I2C求助贴,改的官网范例,读出的都是ff

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:468
  • 最近打卡:2025-06-16 07:06:57
已绑定手机

79

主题

5131

回帖

9138

积分

超级版主

DebugLab

积分
9138
发表于 2025-3-12 11:43:49 | 显示全部楼层
我没有使用过24C32,9楼网友处理好了可以参考一下:
https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=181&pid=151183

论坛搜索“24C”,发现有网友提到从24C32开始是双字节寻址,这与24C02不同,需要注意:
https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=7941&pid=74268
https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=7941&pid=74388

具体请查看24C32数据手册,以下是立创商城找到的中文数据手册,不同品牌的24C32都是兼容的:
https://item.szlcsc.com/datasheet/AD24C32/5722225.html?spm=sc.gb.xds.a___sc.gb.hd.ss&lcsc_vid=T1deU1YFRllYXlZeFQBaVlIAEwILUFZRQgJXVQdfFlcxVlNSRlZbV1dUQ1RYUTsOAxUeFF5JWBYZEEoVDQ0NFAdIFA4DSA%3D%3D
https://item.szlcsc.com/datasheet/24C32(LX)/24007534.html?spm=sc.gb.xds.a___sc.gb.hd.ss&lcsc_vid=T1deU1YFRllYXlZeFQBaVlIAEwILUFZRQgJXVQdfFlcxVlNSRlZbV1dUQ1RYUTsOAxUeFF5JWBYZEEoVDQ0NFAdIFA4DSA%3D%3D

以下是硬件I2C参考程序:
宏定义:
  1. #define                MSIF        0x40
  2. #define                EMSI        0x80
  3. #define                MSACKI      0x02
  4. bit I2C_Busy;
复制代码
I2C函数:
  1. void I2C_Start(void)
  2. {
  3.         I2C_Busy=1;
  4.         I2CMSCR=0x81;
  5.         while(I2C_Busy);
  6. }
  7. void I2C_SendData(unsigned char dat)
  8. {
  9.         I2CTXD=dat;
  10.         I2C_Busy=1;
  11.         I2CMSCR=0x82;
  12.         while(I2C_Busy);
  13. }
  14. void I2C_RecvACK(void)
  15. {
  16.         I2C_Busy=1;
  17.         I2CMSCR=0x83;
  18.         while(I2C_Busy);
  19. }
  20. unsigned char I2C_RecvData(void)
  21. {
  22.         I2C_Busy=1;
  23.         I2CMSCR=0x84;
  24.         while(I2C_Busy);
  25.         return I2CRXD;
  26. }
  27. void I2C_SendACK(void)
  28. {
  29.         I2CMSST=0x00;
  30.         I2C_Busy=1;
  31.         I2CMSCR=0x85;
  32.         while(I2C_Busy);
  33. }
  34. void I2C_SendNAK(void)
  35. {
  36.         I2CMSST=0x01;
  37.         I2C_Busy=1;
  38.         I2CMSCR=0x85;
  39.         while(I2C_Busy);
  40. }
  41. void I2C_Stop(void)
  42. {
  43.         I2C_Busy=1;
  44.         I2CMSCR=0x86;
  45.         while(I2C_Busy);
  46. }
复制代码
初始化(注意先打开EAXFR并设置IO模式):
  1.         //I2C设置
  2.         I2CCFG=0xD7;        //400K@40M
  3.         I2CPSCR=0x00;        //400K@40M
  4.         I2CMSCR=EMSI;        //允许主机模式中断,主机命令为待机
  5.         I2CMSST=0x00;        //清除中断标志
  6.       
  7.         //中断设置
  8.         EA=1;
复制代码
中断:
  1. void I2C_Isr(void) interrupt I2C_VECTOR
  2. {
  3.         if(I2CMSST&MSIF)
  4.         {
  5.                 I2CMSST&=~MSIF;
  6.                 I2C_Busy=0;
  7.         }
  8. }
复制代码

DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-04-13 14:07:50
已绑定手机

0

主题

3

回帖

26

积分

新手上路

积分
26
发表于 2025-4-13 14:07:50 | 显示全部楼层
我这样的读出来也全是FF,求助,不知道该咋改了
24bed2c32a7e3372078a5ca94f5ab3e.png
b03b2328b1a0242d87e8adc8391631c.png
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 13:02 , Processed in 0.492578 second(s), 52 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表