I²C 寄存器读取为什么常使用 Repeated START?
典型寄存器读取先以写方向发送寄存器地址,再不释放总线地发送重复起始并切到读方向。这样保持一次原子事务,避免 STOP 后器件状态变化或其他主机插入。最后一个接收字节通常由主机 NACK 并 STOP。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
典型寄存器读取先以写方向发送寄存器地址,再不释放总线地发送重复起始并切到读方向。这样保持一次原子事务,避免 STOP 后器件状态变化或其他主机插入。最后一个接收字节通常由主机 NACK 并 STOP。
从机可在允许的阶段保持 SCL 为低,推迟主机下一位时钟,因此主机设定频率并不等于实际传输始终按该速率进行。控制器必须支持拉伸,并设置有上限的超时与恢复策略。
总线首字节由 7 位从机地址和最低位读写方向组成;不同控制器 API 有的接收纯 7 位地址,有的要求已放到首字节位置。必须按 API 契约传参,不能把数据手册的读写地址和 7 位地址混用。
CPU、总线和外设时钟由时钟树分频而来,目标频率受电压范围、PLL 输入输出、总线最大频率和 Flash 访问速度约束。切换高频前通常先配置电源档位和等待周期,降频则按安全逆序。
RTU 帧以至少 3.5 个字符时间的总线静默作为帧边界,帧内字符间隔也有限制;地址、功能码、数据和 CRC 按规范组织。字符时间受波特率、数据位、校验和停止位共同决定。
NOR 支持随机读/XIP、擦除块较大,适合代码;NAND 容量密度高但需坏块、ECC 和 FTL;EEPROM 可小粒度改写但容量与速度有限;FRAM 写入快、耐久高但成本和容量受限。选择取决于容量、写频率、掉电一致性和成本。