【总线】IIC学习笔记

news2024/11/6 7:30:45

【总线】IIC学习笔记

  • 参考链接
  • IIC总线介绍
  • IIC总线时序
    • 1.空闲信号
    • 2. 启动信号与停止信号
    • 3.数据的有效性
    • 4.应答信号
    • 5.七位地址传输
  • IIC读写过程(AT24C02举例)
    • IIC读过程
    • IIC写过程
  • 正点原子IIC驱动问题
    • 1、IIC停止信号问题
    • 2、IIC-AT24C02的器件地址发送的疑惑

参考链接

IIC时序图+代码
IIC总线+上拉电阻计算
IIC通信协议
IIC学习

IIC总线介绍

IIC是一种串行、半双工的总线。通信距离短、通信速度低的场合。
IIC有两根线,一个是SDA,用于收发数据的数据线;一个是SCL,用于双方通信时钟的同步。

在这里插入图片描述

IIC是一种多主机总线。连接在IIC总线上的器件分别为主机和从机。
主机有权启用和结束一次通信,从机只能被主机呼叫。
当总线上有多个主机同时启用总线时,IIC具有冲突检测和仲裁的功能。IIC通信的同步和仲裁是自动进行的

每个连接到IIC总线的器件都有一个唯一地址(7bit),每个器件就可以作为主机也作为从机,但是同一时刻只能有一个主机。

IIC总线上的器件删除或者添加,不会影响其他器件的正常工作。

总线空闲时,设备都是开漏输出,由电路中的上拉电阻使SDA和SCL都保持高电平。当任一设备输出低电平时都会使总线上的信号线变低。

IIC三种传输模式:标准模式传输速率为100kbit/s,快速模式为400kbit/s,高速模式下可达3.4M/s,但目前大多IIC设备尚不支持高速模式。连接到总线的接口数量只由总线电容是 400pF 的限制决定。

IIC总线时序

1.空闲信号

在总线未被主机占用时,电路中的上拉电阻使 SDA 和 SCL 线保持高电平状态,并等待主机启用总线。

2. 启动信号与停止信号

起始和停止条件一般由主机产生,总线在起始条件后被认为处于忙的状态 在停止条件的某段时间后,总线再次处于空闲状态。

① 启动信号:在SCL线是高电平时,SDA线从高到低的跳变;
② 停止信号:在SCL线是高电平时,SDA线从低到高的跳变。

在这里插入图片描述

3.数据的有效性

在IIC总线进行数据传输时,SCL时钟信号为高电平期间,SDA数据线上的数据必须保持稳定。只有在SCL时钟线上的信号为低电平期间,SDA数据线上的电平状态才允许变化。
SDA数据线在SCL的每个时钟周期传输一位数据。

在这里插入图片描述

4.应答信号

发送器每发送一个字节,会在第九个时钟脉冲期间释放数据线(低电平),由接收器反馈一个响应(ACK/NACK)。

① ACK(应答信号):应答信号为低电平(0)时,表示接收器已经成功地接收了该字节;
② NACK(非应答信号):应答信号为高电平(1)时,一般表示接收器接收该字节没有成功。

在这里插入图片描述

5.七位地址传输

起始信号后发送的第一个字节(8位)是从机地址+数据方向位。
从机地址共有 7 位,紧接着的第 8 位是数据方向位 R/ W(表示从机进行读/写)操作。
“0” 表示“写”发送数据,“1” 表示“读”请求数据。

在这里插入图片描述

IIC读写过程(AT24C02举例)

本小节图片来源:IIC协议实战项目

IIC读过程

首先,主机发起启动信号。
然后,主机发送器件地址和写方向(一字节)的广播器件寻址,并等待从机应答。
从机应答后,主机发送要读取的数据存储地址,并等待从机应答。
从机应答后,主机再次发起启动信号。
然后,主机发送器件地址和读方向(一字节)的广播器件寻址,并等待从机应答。【更换接收方向】
然后,主机通过SDA读取一个字节的数据。
数据接收完毕后,如果主机不想在接收数据了,需要回复非应答信号。
最后,主机发起停止信号。

在这里插入图片描述

IIC写过程

首先,主机发起启动信号。
然后,主机发送器件地址和写方向(一字节)的广播器件寻址,并等待从机应答。
从机应答后,主机发送要写入的数据存储地址,并等待从机应答。
从机应答后,主机发送想要写入的数据,并等待从机应答。
从机应答后,主机发起停止信号。

在这里插入图片描述

正点原子IIC驱动问题

1、IIC停止信号问题

在这里插入图片描述

上述原版驱动代码。可以发现,一开始两根线都是低电平,并等待了4us。
然后SCL高,SDA立马拉高,并等待4us。停止信号是,在SCL为高的情况下,SDA由低向高转变。这么短的时候,留给SDA的时间太短了吧?
我搜索查到,有些朋友说,慢速没问题,时钟高了就有问题。所以,还是应该注意下。
我觉得应该如下:

void IIC_Stop(void)
{
	SDA_OUT();//sda线输出
	IIC_SCL=0;
	IIC_SDA=0;
	IIC_SCL=1;
	delay_us(4);
	IIC_SDA=1;
	delay_us(4);
}

在这里插入图片描述

2、IIC-AT24C02的器件地址发送的疑惑

在IIC_Send_Byte(0XA0+((ReadAddr/256)<<1))中,0XA0是器件地址,为什么还要加上(ReadAddr/256)<<1?
在使用AT24C02的情况下,这句话并没有用。
因为24C02,一共2Kbit的大小,也就是256字节。所以用一个字节就能把它全部的读写地址表示了。
但是对于04,一共有4Kbit的大小,也就是512字节,一个字节并不能表示其全部的读写地址,得需要9bit才行。
这就跟这个IIC器件有关了,对于高容量eeprom,它有大小分区。
它将读写地址的一部分放到了器件地址中,具体的可以看数据手册。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/485110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OJ搭建配置 功能速查手册

服务器配置 腾讯云 2H4G 5M 60GB 轻量应用服务器 承载大约 200~400人使用&#xff0c;经过压力测试&#xff0c;评测并发速度可满足130人左右的在线比赛。 系统镜像选 Ubuntu 22.04 LTS。 用户管理 一、批量导入&#xff08;从方便管理角度建议以 学生姓名 作为 用户名 &am…

网络安全之黄金票据,白银票据

前言&#xff1a;今天来给大家讲讲黄金票据和白银票据Kerberos认证#金票Golden ticket# 原理#伪造金票的场景和所需条件#利用方式#银票SILVER TICKET# 原理#伪造银票所需条件#金票和银票的区别# 获取的权限不同#认证流程不同#加密方式不同# 前言&#xff1a;今天来给大家讲讲黄…

Unity 3D 学习笔记(1)

文章目录 1.Unity 3D 概述2.Unity的安装过程3.Unity 3D 的项目管理4.Unity 3D 中的场景5.Unity 3D 的界面组成 1.Unity 3D 概述 Unity 3D简介&#xff1a;Unity 3D是虚拟现实行业中使用率较高的一款开发引擎&#xff0c;由Unity Technology公司开发。通过Unity&#xff0c;开发…

手动实现 Spring 底层机制【初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP】

目录 手动实现 Spring 底层机制【初始化 IOC容器依赖注入BeanPostProcessor 机制AOP】 前面我们实际上已经用代码简单实现了 代码演示使用框架 创建一个maven项目 创建UserAction类 创建UserDao类 创建UserService类 创建beans.xml 说明 创建AppMain类 运行效果 如图…

《汇编语言》- 读书笔记 - 第2章-寄存器

《汇编语言》- 读书笔记 - 第2章-寄存器 2.0 8086CPU 寄存器段地址:偏移地址 2.1 通用寄存器2.2 字在寄存器中的存储2.3 几条汇编指令表2.1汇编指令举例表2.2 程序段中指令的执行情况之一问题 2.1表2.3 程序段中指令的执行情况之二问题 2.2 2.4 物理地址2.5 16位结构的CPU2.6 8…

数据埋点1

文章目录 1 什么是数据埋点2 为什么需要数据埋点3 数据埋点能采集哪些用户数据4 数据埋点的分类及方式5 主流的数据上报技术5.1 客户端上报5.2 服务端获取 1 什么是数据埋点 互联网的海量数据是通过数据埋点技术采集用户行为数据而产生的&#xff0c;用户行为数据采集及上报流…

我又不当程序员还要学Python吗?人工智能AI的出现我知道,我错了

Python&#xff08;可读音&#xff1a;派森&#xff09; 时代要淘汰你&#xff0c;连招呼都不会打&#xff01; 这句话近些年我们常在媒体上听到&#xff0c;有点残酷&#xff0c;但却又很现实。 最近&#xff0c;人工智能AI技术火爆全网&#xff0c;而且它所表现出来的“超…

浅谈Spring中的BeanFactory与FactoryBean

前言 理解FactoryBean是非常非常有必要的&#xff0c;因为在Spring中FactoryBean最为典型的一个应用就是用来创建AOP的代理对象&#xff0c;不仅如此&#xff0c;而且对理解Mybatis核心源码也非常有帮助&#xff01;如果甘愿crud&#xff0c;做个快乐的码农&#xff0c;那我就哦…

Springcloud--docker快速入门

认识docker docker相关操作 1.初识Docker 1.1.什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署…

『Linux』第九讲:Linux多线程详解(三)_ 线程互斥 | 线程同步

「前言」文章是关于Linux多线程方面的知识&#xff0c;上一篇是 Linux多线程详解&#xff08;二&#xff09;&#xff0c;今天这篇是 Linux多线程详解&#xff08;三&#xff09;&#xff0c;内容大致是线程互斥与线程同步&#xff0c;讲解下面开始&#xff01; 「归属专栏」Li…

剑指 Offer 54. 二叉搜索树的第k大节点【37】

难度等级&#xff1a;容易 上一篇算法&#xff1a; 226. 翻转二叉树【58】 力扣此题地址&#xff1a; 剑指 Offer 54. 二叉搜索树的第k大节点 - 力扣&#xff08;Leetcode&#xff09; 1.题目&#xff1a;剑指 Offer 54. 二叉搜索树的第k大节点 给定一棵二叉搜索树&#xff0c…

springboot第15集:MyBatis分页

我们在测试SQL的时候&#xff0c;要是能够在控制台输出 SQL 的话&#xff0c;是不是就能够有更快的排错效率&#xff1f; 是的&#xff0c;输出 SQL 可以帮助我们更好地理解代码的执行流程和结果。在控制台输出 SQL 可以让我们看到实际执行的 SQL 语句&#xff0c;这样就能够更…

武忠祥老师每日一题||定积分基础训练(一)

若积分区间相同&#xff0c;最常用的思想&#xff1a; 若 f ( x ) > g ( x ) , 则 ∫ a b f ( x ) > ∫ a b g ( x ) 若f(x)>g(x),则\int_{a}^{b}f(x)>\int_{a}^{b}g(x) 若f(x)>g(x),则∫ab​f(x)>∫ab​g(x) 但 是 往 往 等 号 只 是 在 有 限 个 点 成…

Java实现添加文字水印、图片水印功能

Java实现添加水印功能 添加水印Java 2D API介绍绘制文字水印绘制图片水印循环添加文字水印 添加水印 为图片添加水印的主要作用是保护图片版权&#xff0c;防止图片被未经授权的人使用或传播。为图片添加水印是一种常用的图片处理技术。在Java 中可以使用JDK自带的 Graphics2D …

快速上手Django(九) -Django下载文件、Django上传文件、Django实现excel导入导出

文章目录 快速上手Django(九) -django 上传文件request.FILES&#xff0c;下载文件一、Django下载文件1. Django下载文件方案和思路2. HttpResponse、StreamingHttpResponse和FileResponse区别和选择StreamingHttpResponse和FileResponse对象的对比和选择使用HttpResponse使用S…

浏览器安全之XSS跨站脚本

基本概念 跨站脚本&#xff08;Cross-Site Scripting&#xff0c;XSS&#xff09;是一种经常出现在Web应用程序中的计算机安全漏洞&#xff0c;是由于Web应用程序对用户的输入过滤不足而产生的。 攻击者利用网站漏洞把恶意的脚本代码&#xff08;通常包括HTML代码和客户端Javas…

采用.Net Core技术框架开发的B/S版区域检验管理系统(云LIS)

实验室信息管理系统云LIS源码 SaaS模式运维管理系统 云LIS系统源码是一款全面的实验室信息管理系统源码&#xff0c;其主要功能包括样本管理、检测项目管理、质控管理、报告管理、数据分析、两癌筛查等多个方面。具有独立的配套SaaS模式运维管理系统&#xff0c;支持远程运维&…

AtCoder Beginner Contest 300——A-G题讲解

蒟蒻来讲题&#xff0c;还望大家喜。若哪有问题&#xff0c;大家尽可提&#xff01; Hello, 大家好哇&#xff01;本初中生蒟蒻讲解一下AtCoder Beginner Contest 300这场比赛的A-G题&#xff01; A - N-choice question 原题 Problem Statement Given integers A A A and…

数据埋点2

文章目录 1 数据埋点流程2 六个步骤实现数据埋点设计2.1 确认事件与变量2.2 明确事件的触发时机2.3 明确事件的上报机制2.4 设计数据表结构2.5 统一字段命名规范2.6 明确优先级 3 以电商购物成交转化为例实现数据埋点设计 作为数据分析师的你&#xff0c;是否和我一样经常会被业…

基于改进的离散PSO算法的FJSP的研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…