找回密码
 立即注册
查看: 414|回复: 2

AI8H库函数SOFT_I2C的部分异常

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-06-16 08:32:34

1

主题

3

回帖

519

积分

高级会员

积分
519
发表于 2024-9-29 09:46:52 | 显示全部楼层 |阅读模式
本帖最后由 DebugLab 于 2024-9-29 10:02 编辑

最近使用AI8H_1K28做了一些程序,发现STC8G_H_Soft_I2C.c在24M的时候使用SI2C_ReadNbyte可以正常读取到公司的24C02内存储的数据,当频率降低到6M的时候就会读出异常,经过验证发现程序I2C_ReadAbyte需要进行修改,具体修改方法如下:

源代码:
  1. u8 I2C_ReadAbyte(void)          //read A byte from I2C
  2. {
  3.   u8 i, dat;
  4.   i = 8;
  5.   SDA = 1;
  6.   do
  7.   {
  8.     SCL = 1;
  9.     I2C_Delay();
  10.     dat <<= 1;
  11.     if (SDA)     dat++;
  12.     SCL  = 0;
  13.     I2C_Delay();
  14.   } while (--i);
  15.   return (dat);
  16. }
复制代码


修改后代码:

  1. u8 I2C_ReadAbyte(void)          //read A byte from I2C
  2. {
  3.   u8 i, dat;
  4.   i = 8;
  5.   SDA = 1;
  6.   do
  7.   {
  8.     dat <<= 1;
  9.     SCL = 1;
  10.     I2C_Delay();
  11.     if (SDA)     dat++;
  12.     SCL  = 0;
  13.     I2C_Delay();
  14.   } while (--i);
  15.   return (dat);
  16. }
复制代码
或者
  1. u8 I2C_ReadAbyte(void)          //read A byte from I2C
  2. {
  3.   u8 i, dat;
  4.   i = 8;
  5.   SDA = 1;
  6.   do
  7.   {
  8.     SCL = 1;
  9.     I2C_Delay();
  10.     dat <<= 1;
  11.     if (SDA)     dat++;
  12.     SCL  = 0;
  13.     I2C_Delay();
  14.   } while (i--);
  15.   return (dat);
  16. }
复制代码



回复

使用道具 举报 送花

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

79

主题

5131

回帖

9128

积分

超级版主

DebugLab

积分
9128
发表于 2024-9-29 10:04:12 | 显示全部楼层
用硬件I2C
DebugLab
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:444
  • 最近打卡:2025-06-16 09:26:42
已绑定手机

39

主题

2059

回帖

7070

积分

论坛元老

积分
7070
发表于 2024-9-29 15:52:49 | 显示全部楼层
我将库函数例程包里面读写AT24C02的例子改成软件模拟I2C方式
主时钟改为6MHz、5.5296MHz测试都是正常的
你用附件例子试试看
截图202409291552588792.jpg

18-模拟I2C主机模式访问AT24C02程序.zip

38.99 KB, 下载次数: 49

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 00:12 , Processed in 0.164836 second(s), 62 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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