I2C读写EEPROM(AT24C02)Q&A
传输时序:
1.器件地址通过AT24C02上的A0、A1、A2三个地址位引脚提前设定;
2.地址指的是挂载在总线上的存储的器件的地址;
3.器件内部的存储地址是第一个要发送的数据(Data1);
SCB寄存器:
位于内核中;
为什么要使用中断:
硬件按SCL时序完成数据收发和ACK检测后,触发中断,中断服务函数读取硬件的状态标志,确认操作是否成功,再指挥硬件执行后续的数据发送/接收动作;
若在轮询模式下使用while循环,CPU会死等应答信号,造成CPU资源浪费,ACK 检测是硬件的活,CPU 不参与、不等待,全程可以处理其他任务,仅当硬件检测到ACK结果(成功/失败)然后触发中断触发时CPU才花极短时间处理结果,这正是中断模式效率高的核心原因;
多地址模式中的第二地址:
为挂载更多的设备在总线上;
Debug时遇到的问题:
1.在循环处打断点,设置循环次数,出现debug不停的现象,可以选择程序中的行号打断点,也可以选择汇编指令中的地址号打断点,ctrl+b调出菜单define断
点位置和循环次数;
2.设置条件断点 define a = 10
3.在读写内存的时候设置断点,通过选择菜单中的read或write并写入要监测的变量;
I2C的数据传输:
采用半双工的传输方式,主从设备通过地址帧握手实现数据传输;
I2C的数据寄存器:
同SPI一样,I2C外设中的数据寄存器也是数据收发的窗口,不是正真的buffer寄存器;
Systick:
是CM4的内核外设,其中重装载寄存器的值递减到0,触发一次中断,VAL保存的是当前倒计数的值,若需记录触发中断的次数需要软件记录;
数据传输时的状态读取:
由软件记录Systick的中断次数,为等待状态设定等待时间上限,防止死等;
数据流向:
由stm32向eeprom写:32的内存(pBuffPtr指针,指向的时32内存中的一块区域,里面保存有要写入的内容) -> i2c外设(数据寄存器) —> 通过i2c总线到eeprom
由stm32从eeprom读:eeprom通过i2c总线 -> i2c外设的数据寄存器 -> 32内存
为什么在向寄存器写入后又读一遍:
SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);
/* Delay after an RCC peripheral clock enabling */
tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);
UNUSED(tmpreg);
为了实现硬件同步,在软件写入之后,寄存器会更新内容,在读的过程中会检查寄存器中的数据是否稳定,从而实现硬件同步的目的;
遇到了一次Debug显示的Pin值与程序中选择的Pin不一致:
重新编译了一次再次Debug又一致了,可能时编译器缓存或硬件调试器缓存的问题;
为什么在 HAL_I2C_MspInit 函数里先强制复位I2C再释放复位:
1.清理 “烂摊子”:保证 I2C 从一个干净、已知的状态开始初始化,清除之前可能残留的错误或异常设置。
2.配合硬件启动:硬件要求这样做,能让 I2C 与其他部分在启动时同步,还能等时钟和电源稳定后再正常工作。
3.规范与通用:遵循 HAL 库设计规范,形成标准流程,方便维护和移植,也为错误恢复提供基础。
该函数会在HAL_I2C_Init中调用;
相关知识
单片机STC89C52RC 内部EEPROM
【STM32Cube
21. 常用存储器介绍 — [野火]GD32 H7库开发实战指南——基于野火GD32H737开发板 文档
21. 常用存储器介绍 — [野火]GD32 F303库开发实战指南——基于野火GD32F303系列开发板 文档
IDL读写操作
温湿度控制器
Python 文件操作中的读写模式:open(path, ‘
8个经典智能电子锁方案精选合辑
Android 存储学习之在外部存储中读写文件
MI 小米 9290022200 专业读写护眼台灯 379元
网址: I2C读写EEPROM(AT24C02)Q&A https://www.huajiangbk.com/newsview2512893.html
| 上一篇: Node |
下一篇: 男子花了94元从机场买下别人丢失 |
推荐分享
- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039
