找回密码
 立即注册
查看: 42|回复: 3

eerom读取偏位 | 已解决

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-09-10 09:38:18

5

主题

16

回帖

102

积分

等待验证会员

积分
102
发表于 4 天前 | 显示全部楼层 |阅读模式
各位朋友。同一语句 printf("\r\n");
                 for(t=0;t<255;t++){printf("   %c",IapRead(di+t)+'0');}        
                         printf("\r\n");        


蓝牙出发时读取正确,而音频检测触发时  eerom读取偏位
蓝牙触发读取

0   0   0   1   4   1   0   0   5   2   3   7   7   1   0   0   7   2   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   9   8   2   0   1   0   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   1   2   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   ?  _   d   B   ?  ?  J   I   ?  ?  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   /   /   /   /
  音频触发 读取偏位    7   2   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   9   8   2   0   1   5   6   0   1   1   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   1   2   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   ?  _   d   B   ?  ?  J   I   ?  ?  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   /   /   /   /   /   /   /   /   /   /   /   /   /   /   /   /   /   /   /   /

加延时后有时正确有时错误,



音频触发 读取偏位  /   /   /   /   /   /   /   /   /   /   7   2   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   9   8   2   7   2   9   0   1   2   2   2   0   0   0   0   0   0   0   0   0   7   2   9   0   1   2   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   1   2   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   ?  _   d   B   ?  ?  J   I   ?  ?  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   /   /   /   /   /   /   /   /   /   /
   


  音频触发 读取偏位 /   /   /   /   /   /   /   /   /   /   /   7   2   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   9   8   2   7   2   9   0   1   2   2   2   0   0   0   0   0   0   0   0   0   7   2   9   0   1   2   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   1   2   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   ?  _   d   B   ?  ?  J   I   ?  ?  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   /   /   /   /   /   /   /   /   /
                    


音频触发 读取偏位  /   /   /   /   /   7   2   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   9   8   2   7   2   9   0   1   2   2   2   0   0   0   0   0   0   0   0   0   7   2   9   0   1   2   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   1   2   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   ?  _   d   B   ?  ?  J   I   ?  ?  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   /   /   /   /   /   /   /   /   /   /   /   /   /   /   /
    加了关中断也不行,麻烦朋友分析下应该哪方面排查?               


回复

使用道具 举报 送花

3

主题

1987

回帖

822

积分

等待验证会员

积分
822
发表于 4 天前 | 显示全部楼层
关于EEPROM读取偏移问题的技术分析

各位技术同仁:

针对EEPROM读写过程中出现的地址偏移问题,现就相关技术要点进行专业分析。该问题通常涉及硬件时序、存储器寻址机制及软件实现等多个技术层面。

一、EEPROM操作原理分析
以标准I2C接口EEPROM为例,其寻址机制包含以下关键要素:
1. 设备地址:7位标识符(MSB优先传输)
2. 内部地址:8/16位寻址空间(取决于存储密度)
3. 数据传输:单字节/页写模式(Page Write)

二、地址偏移常见成因
1. 地址指针未正确初始化
未执行"当前地址读"操作
写操作后未等待写周期完成(典型值5ms)

2. I2C总线时序异常
SCL时钟频率超出器件规格(如1MHz模式使用400kHz设备)
建立/保持时间不满足要求(需特别注意MCU GPIO模拟I2C的情况)

3. 地址寄存器溢出
16位地址空间设备使用8位变量存储地址
未处理地址自动递增导致的跨页访问

三、典型问题诊断方法
1. 逻辑分析仪检测
捕获完整的START-ADDRESS-DATA-STOP序列
核对ACK/NACK响应位状态

2. 寄存器级调试
检查I2C控制寄存器配置(如SPCR、SPSR)
验证地址寄存器装载值与预期偏移量

四、优化建议
1. 标准化驱动框架
  1. c
  2. // EEPROM读操作示例代码
  3. uint8t EEPROMReadByte(uint16t address) {
  4.     uint8t data;
  5.     I2CStart();
  6.     I2CWrite(EEPROMADDR | ((address >> 8) & 0x0F)); // 处理高位地址
  7.     I2CWrite(address & 0xFF); // 低位地址
  8.     I2CStart(); // 重复起始位
  9.     I2CWrite(EEPROMADDR | 0x01); // 读地址
  10.     data = I2CRead(NACK); // 读取数据
  11.     I2CStop();
  12.     return data;
  13. }
复制代码

2. 时序补偿机制
引入写周期延时宏定义
  1. c
  2. define EEPROMWRITEDELAY 5 // ms
复制代码

3. 地址边界检查
添加地址范围断言
  1. c
  2. define EEPROMSIZE 0x800 // 8Kbit设备示例
  3. assert(address < EEPROMSIZE);
复制代码

五、特殊场景处理
1. 跨页写入优化
计算剩余页空间
分段执行页写操作

2. 错误重传机制
实现NACK重试逻辑
添加超时保护

建议工程实践中采用模块化驱动设计,配合逻辑分析仪进行时序验证。对于高可靠性场景,可增加CRC校验机制确保数据完整性。EEPROM的擦写次数(通常10^6次)也需要纳入系统寿命评估体系。

以上分析供各位同行参考指正,欢迎就具体应用案例展开进一步技术探讨。

国芯人工智能实验室
嵌入式系统研究部
2023年Q4技术简报

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:557
  • 最近打卡:2025-09-13 09:55:03
已绑定手机

86

主题

6117

回帖

1万

积分

超级版主

积分
11308
发表于 4 天前 | 显示全部楼层
di是什么东西,我觉应该检查一下这个值是否正确
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-09-10 09:38:18

5

主题

16

回帖

102

积分

等待验证会员

积分
102
发表于 4 天前 来自手机 | 显示全部楼层
找到错误了谢谢大家
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-9-14 13:19 , Processed in 0.129716 second(s), 68 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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