【嵌入式学习笔记】嵌入式入门7——IIC总线协议

1.IIC简介

IIC即Inter Integrated Circuit,集成电路总线,是一种同步,串行,半双工通信总线。
IIC总线协议——总线就是传输数据通道,协议就是传输数据的规则
,有以下特点:

  • 由时钟线SCL和数据线SDA组成,并且都接上拉电阻,确保总线空闲状态为高电平
  • 总线支持多设备连接,允许多主机存在,每个设备都有一个唯一的地址
  • 连接到总线上的数目受总线的最大电容400pf限制
  • 数据传输速率:标准模式100k bit/s 快速模式400k bit/s 高速模式3.4Mbit/s
    在这里插入图片描述

IIC协议时序

在这里插入图片描述
在这里插入图片描述

IIC通信过程

  • 写操作过程
    在这里插入图片描述
  • 读操作过程
    在这里插入图片描述

2.EEPROM与24C02简介

EEPROM是一种掉电后数据不丢失的储存器,常用来存储一些配置信息,在系统重新上电时就可以加载
AT24C02是一个2K bit的EEPROM存储器,使用IIC通信方式。
在这里插入图片描述

  • A0/1/2 : 设备地址决定引脚
  • WP : 写保护引脚
  • SCL : 时钟线
  • SDA : 数据线

24C02的通讯地址

在这里插入图片描述

24C04的储存范围是4Kbit=512KB,使用8位地址无法表示全其储存地址(28=256KB),需要在设备地址中借位(29=512KB)

24C02的读写时序

  • 写操作
    字节写模式:一个地址一个数据进行写入。
    页写模式:连续写入数据。只需要写一个地址,连续写入数据时地址会自增,但存在页的限制,超出一页时,超出数据覆盖原先写入的数据。但读会自动翻页。

  • 读操作
    当前读模式:基于上一次读/写操作的最后位置继续读出数据。
    随机地址读模式:指定地址读出数据。
    顺序读模式:连续读出数据。

  • 写操作过程(字节写入/页写入)
    注意:EEPROM比较慢,必须等到10ms后再写下一个字节
    在这里插入图片描述
    在这里插入图片描述

  • 读操作过程
    在这里插入图片描述

3.IIC协议驱动24C02实验

  • 硬件IIC——使用复杂、速度快、较稳定、特定引脚
  • 软件IIC——使用简单、速度较慢、稳定、任意引脚

推荐使用软件IIC,一是因为硬件IIC设计复杂,稳定性一般;二是因为软件IIC方便移植

3.1.IIC配置步骤

  • 使能SCL和SDA对应时钟——__HAL_RCC_GPIOB_CLK_ENABLE()
  • 设置GPIO工作模式——SDA开漏SCL推挽输出,使用HAL_GPIO_Init初始化
  • 编写基本信号——起始信号、停止信号、应答信号
  • 编写读和写函数——iic_read_byte、iic_send_byte
    注意:发送完成,主机释放SDA

为什么IIC总线SDA建议用开漏模式?

  • IIC的SDA脚即要作为输出,又要作为输入,用开漏输出模式,很好实现输出输入共用,避免IO模式频繁切换带来的麻烦。
  • 输出时:主机(MCU)输出0,可以拉低信号,实现低电平发送,主机输出1(实际不起作用),由外部上拉电阻上拉,实现高电平发送
  • 输入时:主机(MCU)设置输出1状态,此时因为MCU无法输出1,相当于释放了SDA脚,此时外部器件可以主动拉低SDA脚/释放SDA脚(同样由上拉电阻提供“输出1的功能”),实现SDA脚的高低电平变化。
  • 由于开漏输出模式下,MCU还是可以读取IDR状态寄存器,来获取引脚高低电平,因此MCU读取IDR,即可获得SDA脚的高低电平状态,从而实现输入检测。
    也可以参考http://t.csdn.cn/fLxa9和http://t.csdn.cn/3x1wU

3.2.24C02配置步骤

  • 初始化IIC接口
  • 编写写入/读取一个字节数据函数——遵循时序流程编写
  • 编写连续读和连续写函数——在上面的基础上进行实现

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学建模之“TOPSIS数学模型”原理和代码详解

一、简介 TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)是一种多准则决策分析方法,用于解决多个候选方案之间的排序和选择问题。它基于一种数学模型,通过比较每个候选方案与理想解和负理想解之间的相…

HTTPS 的加密流程

目录 一、HTTPS是什么? 二、为什么要加密 三、"加密" 是什么 四、HTTPS 的工作过程 1.对称加密 2.非对称加密 3.中间人攻击 4.证书 总结 一、HTTPS是什么? HTTPS (Hyper Text Transfer Protocol Secure) 是基于 HTTP 协议之上的安全协议&…

数仓架构模型设计参考

1、数据技术架构 1.1、技术架构 1.2、数据分层 将数据仓库分为三层,自下而上为:数据引入层(ODS,Operation Data Store)、数据公共层(CDM,Common Data Model)和数据应用层&#xff…

引入三阶失真的非线性放大器的模拟输出及使用中值滤波器去除峰值研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

网络安全(自学)

想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全…

Mybatis 源码 ④ :TypeHandler

文章目录 一、前言二、DefaultParameterHandler1. DefaultParameterHandler#setParameters1.1 UnknownTypeHandler1.2 自定义 TypeHandler 三、DefaultResultSetHandler1. hasNestedResultMaps2. handleRowValuesForNestedResultMap2.1 resolveDiscriminatedResultMap2.2 creat…

Ctfshow web入门 命令执行RCE篇 web29-web77 与 web118-web124 详细题解 持续更新中(预计8.18完成)~

Ctfshow 命令执行 web29 pregmatch是正则匹配函数,匹配是否包含flag,if(!preg_match("/flag/i", $c)),/i忽略大小写 可以利用system来间接执行系统命令 flag采用f*绕过,或者mv fl?g.php 1.txt修改文件名&#xff0c…

BaseMapper的insert方法快速插入数据未提交问题

一、前言 今天测试一批日志数据插入数据库,发现通过BaseMapper的int insert(T entity);方法在大量数据进行插入的时候插入的数据变成了未提交。意思就是程序运行insert成功,但是数据库里却没有数据。当一条一条数据插入的时候却是可以的,循环…

【实战】十一、看板页面及任务组页面开发(一) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十三)

文章目录 一、项目起航:项目初始化与配置二、React 与 Hook 应用:实现项目列表三、TS 应用:JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

docker 安装elasticsearch、kibana

下载es镜像 docker pull elasticsearch 启动es容器 docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e ES_JAVA_OPTS"-Xms512m -Xmx512m" -d elasticsearch 验证es界面访问 ​​​​​http://节点ip:9200/ ​…

一、window配置微软商店中的Ubuntu,及错误解决方法

(1)首先,在微软商店中搜索“Ubuntu”,下载你喜欢的版本(此处) (2)设置适用于window的Linux子系统,跟着红色方框走 点击“确定”之后,会提示你重启电脑,按要求重启电脑即可…

LabVIEW对并行机器人结构进行建模仿真

LabVIEW对并行机器人结构进行建模仿真 为了对复杂机器人结构的数学模型进行建模、搜索、动画和验证,在工业机器人动态行为实验室中,设计并实现了具有五个自由度的单臂型机器人。在研究台上可以区分以下元素:带有直流电机和编码器的机器人;稳…