详谈IIC
前言
在嵌入式底层系统中,常见的通讯方式,串口,IIC,SPI,IIS等,一般IIC,SPI,IIS更多的采取IO模拟,其余CAN,UART均是硬件设计直接支持,而IIC主要用于多数传感器数据的读写,IIS更多用于语音驱动,SPI则用于传输要求较快的场景,如图像传输等,本文则着重阐述作者认知中的IIC,以及相关的实例和实际过程中的细微处理等,有机会和时间再慢慢写其他。
硬件设计注意
一般来说IIC主要有两根主要的线,SDA和SCL(去除电源相关的VCC和GND),硬件设计过程中SDA和SCL注意做上拉处理,电阻的选值在一定基础上也会影响到整体的通讯速率。
IIC的基础规则
1.基本约定
(1)总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。
(2)通常来说IIC设备一般会存在一个设备编号,用于区分相关的设备,占7个bit,最后一个bit作为此次操作的读写处理位,最后一个bit为0表示写,为1表示读取(此处顺序是从高数据到低数据算的),例如51H—>0101 0001,当我们要写入数据的时候需要传输1010 0010 也就是A2H数据。
(3)发送到SDA 线上的每个字节必须为8 位,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据的最高位(MSB),如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线SCL 保持低电平,迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线SCL 后数据传输继续。
(4)规定,只允许SCL为高的时候,SDA的数据有效传输,也就是说我们在SCL为低的时候修改SDA的电平去表示你要传输的bit电平,修改稳定后我们将SCL拉高,另一个设备读取到SCL高的时候会去采样SDA的电平,注意这里的措辞是稳定,根据选型的芯片和通讯要求等,一般会做一定的延时,具体可以看相关的设备的手册。
(5)IIC是一个半双工,这是由其数据性决定的,SDA作为数据的主要传输线路,不可能同时传输两端数据。
2.IIC的基本传输流程
IIC根据SCL和SDA的线路情况将通讯的状态分为以下几种,空闲状态(IDLE状态),起始信号(START信号),确认信号(ACK/NACK),停止信号(STOP信号),相对实际通讯过程中,我们会多加几个通讯流程,数据传输阶段,等待确认信号。
3.相关传输流程的SCL和SDA的处理
以下会做一个简单的通讯过程的说明,以程序设计流程为示例,注意以下过程修改引脚的时候注意电平转换一般需要延时时间
空闲态:一开始没有数据传输的过程中会处于空闲态,SDA=SCL=1,两者均保持高电平,从一种角度上来说为什么建议加上拉,从抗干扰层次说也是,如果做键盘扫描没有加上拉的话,可能会体会更深,从软件上来说浮空就是1,但是实际上要从EDA设计角度来说,一般会认为是X,未知态。
起始信号:SCL=1,SDA-=1>SDA=0,当SCL为高的时候SDA由高为低,下降沿,从设计的角度来说,数据的传输必然是起始开始的,之所以设定在SCL高的时候,让SDA为0表示起始信号,个人理解是这样是设计让数据变化更快,只需要更改一根线的电平,可以参考格雷码的存在意义,起始信号一般是空闲态转后的状态。
数据传输:第一个传输的是地址+读写标志位组成的8bit数据,当起始信号的存在被检测后,将SCL=0,然后修改对应的SDA,认为SDA引脚稳定表达你想要的逻辑电平后,SCL=1,另一个设备检测到SCL为1后会开启采样,给予另一个设备足够的采样时间采用SDA,这样就完成1bit的传输。
ACK/NACK:当完成如上的8个bit数据传输后,设备会等待接收到数据的响应信号,当接收到数据的设备已经发完或者异常情况(常见的异常,请见下面补充),或者没有传输完成则会表示ACK让你进行下一步操作,告诉你已经做完一个数据步骤,ACK:SCL高电平时,SDA为低电平,NACK:SCL高电平时,SDA为高电平,按照个人理解的话,常见的程序存在两种,一种是不管直接进行下一个步骤就进行ACK判断,一种是会将释放SDA的控制,SCL=0,SDA=1,SCL=1,让另一个设备去拉低SDA来排除最后一个字节发送为0的时候的区分,作为等待ACK或者NACK的程序设计,NACK和空闲的状态表示一样。
停止信号:SCL=1,SDA=0–>SDA=1在SCL为高电平时,SDA上升沿。以停止信号作为整个程序的指令的结束。
具体事例流程说明
上图是VCNL4200传感器的协议流程图,采取的官方数据手册,白色是主设备做的,深色是VCNL做的。
1.先初始化IO口,对于我们来说SCL必然是我们一直控制的,做为主设备,设置输出,也可以将SDA=1做为输出,进入空闲态。
2.如图的第一个表示的是写数据,开始信号,由空闲进入开始,开始信号的要求是SCL的时候SDA一个下降沿,我们可以直接将SDA拉低即可。
3.传输数据地址,VCNL4200的地址是51H,通过上面的示例得到,我们写的时候变成了A2H,将SCL拉低,然后SDA拉高,后再将SCL拉高,如此处理8个bit。
4.进入等待阶段ACK阶段,按照上面的两种方式中的一种即可
5.后面同2-4,知道P阶段,先在SCL为低的情况下,拉低SDA,然后将SCL=1,SDA=1,产生一个上升沿作为结束。
6.对于读取来说,不一样的就是从设备读取的过程,在这个过程中仍然是主设备控制SCL,我们会释放SDA,将SCL拉低,给予从设备一段时间,然后其去修改SDA的电平,然后我们读取SDA的逻辑电平,用于表示读取到的bit数据,在读取到8bit数据后给予ACK或者NACK反应。
补充:
通讯过程中出现以下情况,总线上会出现NACK信号:
1)接收方忙于其他事情,不能接收数据
2)接收方不能理解收到的数据或者没有空间存储数据
3)主机读取数据完成,返回NACK告知从机读取完成。
相关文章:

详谈IIC
前言 在嵌入式底层系统中,常见的通讯方式,串口,IIC,SPI,IIS等,一般IIC,SPI,IIS更多的采取IO模拟,其余CAN,UART均是硬件设计直接支持,而IIC主要用于多数传感器数据的读写,…...

【Autoware】采集实验数据bag包并仿真运行
文章目录1. 官方demo包2. 控制底层地图采集3. 感知定位4. 规划控制5. 仿真或实车运行1. 官方demo包 wget http://db3.ertl.jp/autoware/sample_data/sample_moriyama_data.tar.gz wget http://db3.ertl.jp/autoware/sample_data/sample_moriyama_150324.tar.gz官方示例包的网上…...

名创优品怎么把创意做成生意?
最近,“主”无处不在,从让“依托答辩”梗火出圈的动画《三体》,到备受好评的电视剧《三体》,再到仍在刷新高票房成绩的《流浪地球2》。作为近些年来中国为数不多的爆款IP制造者,刘慈欣在《三体》中提出了一个著名的理论…...

springboot原项目配置文件迁移至nacos
目录一、配置文件迁移nacos1.安装nacos2.添加依赖3.改造service-product3.改造server-gateway一、配置文件迁移nacos 1.安装nacos 1,如果之前安装过nacos,nacos数据保存至mysql,先删除已安装的nacos,再安装 docker stop nacos …...

常用的shell脚步操作
文章目录一、如何开始一个shell脚本?1.基本语法2.变量定义规则二、特色变量1.$n2.$?三、条件判断1.基本语法2.运算符if,for,while四、字符串切割1.从指定位置开始截取从字符串左边开始计数从右边开始计数2.从指定字符(子字符串)开…...

Java on VS Code 2月更新|JUnit 5 并行测试与 Spring Boot 插件的过滤功能
作者:Nick Zhu - Senior Program Manager, Developer Division at Microsoft 排版:Alan Wang 大家好,欢迎来到我们的二月更新!在此博客中,我们将为您带来与 JUnit 5 并行测试相关的新功能以及用于 Spring Boot Dashboa…...

无线WiFi安全渗透与攻防(三)之Windows扫描wifi和破解WiFi密码
系列文章 无线WiFi安全渗透与攻防(一)之无线安全环境搭建 无线WiFi安全渗透与攻防(二)之打造专属字典 windows下wifi进行扫描和破解 1.wifi扫描 (1).软件介绍 WirelessMon是一款无线网络扫描工具,它可以帮助用户扫描附近的无线信号&…...

Python中的遍历字典的键和值
一、Python的字典在项目的开发过程中,如果遇到有映射关系的内容可以考虑使用Python中的字典进行存储数据,字典中冒号前的数据称为【键】、冒号后的数据称为【值】。二、Python字典的用法2.1、Python的定义#Python字典的定义 字典名称{键1:值1,键2:值2,键…...

三天Golang快速入门—结构体
Struct结构体什么是结构体结构体定义基本实例化new实例化键值对初始化结构体方法和接收者结构体说明结构体方法和接收者值类型和指针类型接收者struct与jsonstruct转json字符串json转structstruct tagTag结构体转化Json字符串Json字符串转成Tag结构体什么是结构体 1.Golang中没…...

日常算法刷题——力扣704
##2023/3/2 刷算法的第一天 针对力扣的704题:本题是二分查找的基本使用!在此需要注意二分查找的基本特点: 1.数列基本有序; 2.数列数据内容不可重复。 此题只需了解二分查找算法的基本概念,无坑可跳。但在力扣上刷题就…...

【服务器数据恢复】VMware虚拟机下的SQL Server数据库数据恢复案例
服务器数据恢复环境: 一台某品牌PowerEdge系列服务器和一台PowerVault系列存储,上层是ESXI虚拟机文件,虚拟机中运行SQL Server数据库。 服务器故障: 机房非正常断电导致虚拟机无法启动。管理员检查虚拟机发现虚拟机配置文件丢失&…...

详解旨在提升EVM底层性能的兼容公链Monad
EVM带来的繁荣2020年以太坊链上DeFi的蓬勃发展使得EVM成为关注焦点,大部分DeFi项目都开始基于以太坊公链,这也使得EVM成为行业的标杆,不少链都加入了EVM大军,比如polygon、BSC、fantom等等,而EVM也使得链上生态进一步繁…...

2023社会工作者证书怎么考 在哪里报名考试
考取社会工作者证需要在网上报名,社工证是证书考试,分为初级、中级和高级三个级别,一般情况下满足报考条件就可以进行报考了,在中国人事考试网上进行报名及缴费。 1考取社会工作者证的流程 1、社工证报名需要登录中国人事考试网&a…...

统计学 类别比变量的判断
文章目录类别比变量的判断一个类别变量的拟合优度检验两个类别变量的独立性检验列联表与 χ2\chi^2χ2 独立性检验应用 χ2\chi^2χ2 检验应该注意的问题两个类别变量的相关度检验φ\varphiφ 系数Cramers VVV 系数列联系数总结类别比变量的判断 一个类别变量的拟合优度检验 …...

2.基于Label studio的训练数据标注指南:(智能文档)文档抽取任务、PDF、表格、图片抽取标注等
文档抽取任务Label Studio使用指南 1.基于Label studio的训练数据标注指南:信息抽取(实体关系抽取)、文本分类等 2.基于Label studio的训练数据标注指南:(智能文档)文档抽取任务、PDF、表格、图片抽取标注等…...

如何在openKylin操作系统上搭建Qt开发环境
一、获取linux系统下的Qt安装包 Qt官网下载地址:https://download.qt.io 国内镜像下载地址:https://mirrors.cloud.tencent.com/qt/ 。建议用镜像下载速度快。集成安装包在 official_releases/qt 目录下,新地址:https://downloa…...

T_SQL和SQL的区别
一. SQL Server和T-SQL的区别(⭐T-SQL 包含了 SQL)SQL Server是结构化查询语言,是目前关系型数据库管理系统中使用最广泛的查询语言T-SQL是标准SQL语言的扩展,是SQL Server的核心,在SQL的的基础上添加了变量,运算符,函数和流程控制等,Microso…...

用Python自己写一个分词器,python实现分词功能,隐马尔科夫模型预测问题之维特比算法(Viterbi Algorithm)的Python实现
☕️ 本文系列文章汇总: (1)HMM开篇:基本概念和几个要素 (2)HMM计算问题:前后向算法 代码实现 (3)HMM学习问题:Baum-Welch算法 代码实现(…...

刷题笔记2 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结
977.有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 […...

python 支付宝营销活动现金红包开发接入流程-含接口调用加签
1 创建网页/移动应用 2 配置接口加签方式 涉及到金额的需要上传证书,在上传页面有教程, 在支付宝开放平台秘钥工具中生成CSR证书,会自动保存应用公钥和私钥到电脑上,调用支付宝接口需要应用私钥进行加签 上传完CSR证书后会有三个…...

Python操作Windows
用python进行windows端UI自动化的库有很多,比如pywinauto等,本文介绍一个使用autoit3来实现的 pyautoit 库pyautoit 是一个用python写的基于AutoItX3.dll的接口库,用来进行windows窗口的一系列操作,也支持鼠标键盘的操作。安装pip…...

Aptos SDK交互笔记(一)
背景 之前我们已经了解TS的一些语法,接下来可以实战训练下,这系列的文章就会介绍如何通过Aptos官网提供的TypeScript SDK与Aptos进行交互,这篇文章主要讲的就是如何使用提供API在aptos区块链上转帐。 官网示例 官网提供了交互的例子&#…...

汽车 12V 和 24V 电池输入保护推荐
简介汽车电池电源线路在运行系统时容易出现瞬变。所需的典型保护包括过压、过载、反极性和跨接启动。在汽车 的生命周期中,交流发电机可能会被更换为非OEM 部件。售后市场上的交流发电机可能具有不同的负载突降(LOAD DUMP)保护或没有负载突降…...

龙蜥LoongArch架构研发全揭秘,龙芯开辟龙腾计划技术合作新范式
编者按:在开源新基建加快建设的背景下,越来越多的企业选择加入龙蜥社区,当前社区生态合作伙伴已突破 300 家。于是,龙蜥社区能为加入的企业提供哪些支持成为越多伙伴们更加关注的话题。本文将以龙蜥社区和龙芯中科联合研发龙蜥 Lo…...

剑指 Offer 16. 数值的整数次方
摘要 剑指 Offer 16. 数值的整数次方 本题的方法被称为快速幂算法,有递归和迭代两个版本。这篇题解会从递归版本的开始讲起,再逐步引出迭代的版本。当指数n为负数时,我们可以计算 x^(-n)再取倒数得到结果,因此我们只需要考虑n为…...

在苹果电脑 mac 上安装原神(playCover)
该方法只能在 M1、M2 mac 上安装原神 目录前言一、首先下载安装 playCover1. playCover 下载2. playCover 安装安装出现问题解决方法二、下载安装原神1.安装包下载2.安装原神三、登录、键盘映射及版本更新等问题登录键盘映射版本更新前言 最近买了新的mac,作者本人…...

数据结构考研习题精选
1 A假设比较t次,由于换或不换,则必然有2^t种可能。又设有n个关键字,n!排列组合,则必然有2^t&…...

linux常用命令介绍 04 篇——uniq命令使用介绍(Linux重复数据的统计处理)
linux常用命令介绍 04 篇——uniq命令使用介绍(Linux重复数据的统计处理)1. uniq 使用语法2. sort 简单效果3. uniq 使用例子3.1 不加任何选项3.1.1 不用 sort 效果3.1.2 uniq 结合 sort 一起使用3.2 使用选项例子3.2.1 去重打印(或打印不重复…...

网站打不开数据库错误等常见问题解决方法
1、“主机开设成功!”上传数据后显示此内容,是因为西部数码默认放置的index.htm内容,需要核实wwwroot目录里面是否有自己的程序文件,可以删除index.htm。 2、恭喜,lanmp安装成功!这个页面是wdcp的默认页面&…...

爬虫实战进阶版【1】——某眼专业版实时票房接口破解
某眼专业版-实时票房接口破解 某眼票房接口:https://piaofang.maoyan.com/dashboard-ajax 前言 当我们想根据某眼的接口获取票房信息的时候,发现它的接口处的参数是加密的,如下图: 红色框框的参数都是动态变化的,且signKey明显是加密的一个参数。对于这种加密的参数,我们需要…...