DW_apb_i2c学习笔记之I2C协议部分

2023-10-27 18:50

本文主要是介绍DW_apb_i2c学习笔记之I2C协议部分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

i2c 协议

START & STOP condition

![[Pasted image 20220905111501.png]]

  • bus为IDLE的时候,SCL和SDA都为高
  • 当SCL为高的时候,把SDA拉低发出START condition
  • 当SCL为高的时候,把SDA拉高发出STOP condition
  • 在SCL为low的时候可以改变数据,但是当SCL为1的时候必须要保持数据stable

address slave protocl

  • 7 bit address format bits 7:1 表示slave地址,bit0表示读写 0为写,1为读[[Pasted image 20220905113648.png]]

  • 10 bit address format 由2个byte组成第一个byte的前5个bits表示告诉slave这是一个10 bits address,图中A9,A8 A7-A0都用来表示10bit的地址 在这里插入图片描述

    • 第一个byte的定义 在这里插入图片描述

Transmitting & Receiving protocol

  • master- transmitter and slave-receiver

    • 所有的data都是以byte长度进行传输,
    • master发送address和R/W信号之后,slave需要response一个acknowledege信号
    • master传输完每1 byte data之后slave也需要ACK,注意这里的ACK是receiver必须发给transmiter的,有可能发给master,也有可能发给slave
    • 如果slave没有respond ACK pulse,master会用STOP去中断传输,slave必须拉高SDA这样master才能中断传输
    • ![[Pasted image 20220905134332.png]]
  • master-receiver and slave-transmitter

    • master每接收一个byte都要发一个ACK给slave,但是在最后1个byte的时候,master会发一个NACK表示这是最后1个byte。
    • 在slave检测到master发出的NACK,会拉高SDA(释放SDA line) ,这样master才可以issue一个STOP condition,如果master不想交出总线,可以发出一个RESTART conditon之后他可以重新选择一次地址和R/W,如下图10bit的情况 在这里插入图片描述

START BYTE transfer protol

当没有板上的i2c HW module的时候,需要一个START BYTE的协议,比如和DW_apb_i2c交互的时候。为什么需要START BYTE,因为硬件上面没有处理器这种可以轮询的device的时候需要让软件去轮询总线的行为,使用常规的START condition的时候容易错过,因此扩展START BYTE为‘00000001’并用较低频率去采样SDA line,只要查到7个0中的任何1个0,就改为高速。

  • 当DW_apb_i2c作为slave的时候i2c bus会一直处于最高速的状态,不需要START BYTE transfer
  • 当DW_apb_i2c作为master的时候需要在每一个transfer的开头加上START BYTE,以确保slave device接收到了
  • START byte的过程:
    1. master 产生 START condition
    2. master transmit START byte ’00000001‘
    3. master transmit ACK clock pulse
    4. No slave sets the ACK to 0(没有任何一个slave响应ACK)
    5. master generate RESTART conditon
      HW receiver不需要respond START BYTE,因为它是保留地址
      在RESTART conditionu之后就被复位
      在这里插入图片描述

timing spec

![[Pasted image 20220913093655.png]]

  • tf tr,分别对应falling edge和rising edge的时间,两个transition之间的时间,30%-70%图中

  • setup time,hold time分别对应采样前/后数据要保持稳定的时间,图中分别对应了SCL 上升沿到数据改变状态的这段时间和SCL下降沿到数据改变状态的这段时间

  • START conditon setup hold time

    • START conditon hold time 表示在SCL下降之前应该保持稳定的时间
    • START conditon setup time只有在RESTART的情况下才有,表示在restart之前SDA应该保持为高的时间
    • 在这里插入图片描述
  • STOP condition setup time

    • 指的是在SCL为高的时候SDA在变高之前应保持稳定的时间 在这里插入图片描述
  • setup time for data

    • 在这里插入图片描述
  • Buffer time

    • buffer time specifies the bus free time between stop and start condition,如果不满足的话,slave device可能就不能把新的START condition看作一次新的传输,从而不会respond在这里插入图片描述

这篇关于DW_apb_i2c学习笔记之I2C协议部分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/287660

相关文章

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl