当前位置: 首页 > ds >正文

“假读“操作在I2C接收流程中的原因

在I2C接收流程中,"假读"操作是NXP I2C控制器工作特性要求的必要操作,具体原因如下:

// 接收函数关键代码
void i2c_master_read(I2C_Type *base, unsigned char *buf, unsigned int size)
{// ...dummy = base->I2DR; /* 假读 */
}

假读的必要性

  1. 启动接收时钟
    NXP I2C控制器在接收模式下,必须通过读取I2DR寄存器来触发SCL时钟生成。第一次读取不会获取有效数据,但会启动总线时钟。

  2. 清除传输完成标志
    写入接收模式后,IIF标志位(I2SR[1])可能处于置位状态。通过假读可以清除该标志,确保后续状态检测的准确性。

  3. 协议时序要求
    I2C协议规定主机接收第一个数据字节前需要发送ACK/NACK。假读操作对应着第一个ACK周期的完成,为后续真实数据接收建立正确的时序。

操作流程解析

主程序 I2C控制器 总线 I2DR寄存器 设置接收模式 发送ACK 此时I2DR无有效数据 假读(启动时钟) 接收真实数据 真实数据读取 主程序 I2C控制器 总线 I2DR寄存器

对比发送流程

i2c_master_write()中不需要假读,因为发送方向的操作通过写入I2DR寄存器直接触发数据传输。而接收方向需要先通过假读建立时钟同步。

http://www.xdnf.cn/news/3124.html

相关文章:

  • DECAP CELL
  • Qt入门——什么是Qt?
  • 【Linux】第十三章 访问Linux文件系统
  • React:封装一个编辑文章的组件
  • python如何流模式输出
  • Missashe考研日记-day30
  • JR6001语音模块详解(STM32)
  • 1.3 点云数据获取方式——ToF相机
  • Linux电源管理(3)_关机和重启的过程
  • 【今日三题】小红的ABC(找规律) / 不相邻取数(多状态dp) / 空调遥控(排序+二分/滑动窗口)
  • 面向人工智能、量子科技、人形机器人等产业,山东启动制造业创新中心培育认定
  • Android Studio 中实现方法和参数显示一行
  • Git 多账号切换及全局用户名设置不生效问,GIT进行上传无权限问题
  • 科研入门规划
  • computed计算值为什么还可以依赖另外一个computed计算值?
  • linux下ACL权限和掩码权限
  • Springboot2.X 读取多层嵌套的配置结构
  • 【东枫电子】AI-RAN:人工智能 - 无线接入网络
  • react-新建项目复用node_modules
  • 从摄像头到 RAW 数据:MJPEG 捕获与验证
  • 大屏软件设计的交互设计底层逻辑
  • TCP概念+模拟tcp服务器及客户端
  • React Navigation 使用指南
  • mongoose的介绍,连接数据库
  • linux安装ragflow
  • 4.29【Q】paraCompute
  • 深入分析OpenCV技术原理:计算机视觉的核心力量
  • JavaScript 中的类型转换机制?
  • ​MCP协议深度解析:原理、应用与物联网时代的机遇-优雅草卓伊凡
  • 5. 配置舵机ID(具身智能机器人套件)