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

第12章 I2C总线与EEPROM 12.2

12.2.I2C寻址模式上一节介绍的是I2C每一位信号的时序流程而I2C通信在字节级的传输中也有固定的时序要求。I2C通信的起始信号(Start)后首先要发送一个从机的地址这个地址一共有7位紧跟着的第8位是数据方向位(R/W)“0”表示接下来要发送数据写‘“1”表示接下来是请求数据读。打电话的时候当拨通电话接听方捡起电话肯定要回一个“喂”这就是告诉拨电话的人这边有人了。同理这个第九位ACK实际上起到的就是这样一个作用。当发送完了这7位地址和1位方向后如果发送的这个地址确实存在那么这个地址的器件应该回应一个ACK拉低SDA即输出“0”如果不存在就没“人”回应NACKSDA将保持高电平即“1”。写一个简单的程序访问一下Kingst51开发板上的EEPROM的地址另外再写一个不存在的地址看看它们是否能回一个ACK来了解和确认一下这个问题。Kingst51开发板上的EEPROM器件型号是24C02在24C02的数据手册3.6节中可查到24C02的7位地址中其中高4位是0b1010低3位的地址取决于具体电路的设计,由芯片的A2、A1、A0这3个引脚的实际电平决定来看一下电路图如图12-4所示。图12-4 24C02原理图从图12-4可以看出A2、A1、A0都是接的GND也就是说都是0因此24C02的7位地址实际上是二进制的0b1010000也就是0x50。用I2C的协议来寻址0x50另外再寻址一个不存在的地址0x62寻址完毕后通过逻辑分析仪观察一下两个地址是否回复ACK。/*****************************main.c文件程序源代码******************************/#include reg52.h#include intrins.h#define I2CDelay() {_nop_();_nop_();_nop_();_nop_();}sbit I2C_SCL P3^7;sbit I2C_SDA P3^6;bit I2CAddressing(unsigned char addr);void main(){I2CAddressing(0x50); //查询地址为0x50的器件I2CAddressing(0x62); //查询地址为0x62的器件while (1);}/* 产生总线起始信号 */void I2CStart(){I2C_SDA 1; //首先确保SDA、SCL都是高电平I2C_SCL 1;I2CDelay();I2C_SDA 0; //先拉低SDAI2CDelay();I2C_SCL 0; //再拉低SCL}/* 产生总线停止信号 */void I2CStop(){I2C_SCL 0; //首先确保SDA、SCL都是低电平I2C_SDA 0;I2CDelay();I2C_SCL 1; //先拉高SCLI2CDelay();I2C_SDA 1; //再拉高SDAI2CDelay();}/* I2C总线写操作dat-待写入字节返回值-从机应答位的值 */bit I2CWrite(unsigned char dat){bit ack; //用于暂存应答位的值unsigned char mask; //用于探测字节内某一位值的掩码变量for (mask0x80; mask!0; mask1) //从高位到低位依次进行{if ((maskdat) 0) //该位的值输出到SDA上I2C_SDA 0;elseI2C_SDA 1;I2CDelay();I2C_SCL 1; //拉高SCLI2CDelay();I2C_SCL 0; //再拉低SCL完成一个位周期}I2C_SDA 1; //8位数据发送完后主机释放SDA以检测从机应答I2CDelay();I2C_SCL 1; //拉高SCLack I2C_SDA; //读取此时的SDA值即为从机的应答值I2CDelay();I2C_SCL 0; //再拉低SCL完成应答位并保持住总线return ack; //返回从机应答值}/* I2C寻址函数即检查地址为addr的器件是否存在返回值-从器件应答值 */bit I2CAddressing(unsigned char addr){bit ack;I2CStart(); //产生起始位即启动一次总线操作ack I2CWrite(addr1); //器件地址需左移一位因寻址命令的最低位//为读写位用于表示之后的操作是读或写I2CStop(); //不需进行后续读写而直接停止本次总线操作return ack;}前面的章节中已经提到利用库函数_nop_()可以进行精确延时一个_nop_()的时间就是一个机器周期这个库函数包含在intrins.h这个文件中如果要使用这个库函数只需要在程序最开始和包含reg52.h一样includeintrins.h之后程序中就可以使用这个库函数了。还有一点要提一下I2C通信分为低速模式100kbit/s、快速模式400kbit/s和高速模式3.4Mbit/s。因为所有的I2C器件都支持低速但却未必支持另外两种速度所以作为通用的I2C程序选择100k这个速率也就是说实际程序产生的时序必须小于等于100k的时序参数很明显也就是要求SCL的高低电平持续时间都不短于5us因此在时序函数中通过插入I2CDelay()这个总线延时函数它实际上就是4个NOP指令用define在文件开头做了定义加上改变SCL值语句本身占用的至少一个周期来达到这个速度限制。如果以后需要提高速度那么只需要减小这里的总线延时时间即可。此外学习一个发送数据的技巧就是I2C通信时如何将一个字节的数据发送出去。注意函数I2CWrite中用的for循环的技巧。for (mask0x80; mask!0; mask1)由于I2C通信是从高位开始发送数据所以先从最高位开始0x80和dat进行按位与运算从而得知dat第7位是0还是1然后右移一位也就是变成了用0x40和dat按位与运算得到第6位是0还是1一直到第0位结束最终通过if语句把dat的8位数据依次发送了出去。使用Kingst LA5016逻辑分析仪将抓到的波形显示出来并且用过I2C的协议解码器将协议解析出来如图12-5所示。从图上可以看出第一个字节发的是0x50回复了一个ACK第二个字节发了一个0x62但是出现的是NAK说明这个地址没有产生应答。图12-5 逻辑分析仪抓取I2C地址在逻辑分析仪的I2C协议设置中有三种地址格式显示方式也就是目前市面上各种资料对I2C协议地址定义的方式。如图12-6所示。图12-6 I2C地址显示格式前边讲I2C发送的第一个字节是7位地址加一位读写位但是有些资料直接将读写位归结到I2C的地址也有的资料将7位地址位认为是高7位以开发板的0x50地址和0x62地址为例即地址二进制0b1010 000写的时候是0b1010 0000读的时候是0b1010 0001。方式18-bit包含读/写位0x50地址对应这种方式写地址为0xA0;读地址为0xA1。方式28-bit读/写位显示为0即写地址和读地址都是0xA0。方式37-bit本教材采用的方式写地址和读地址都是0x50。

相关文章:

第12章 I2C总线与EEPROM 12.2

12.2.I2C寻址模式上一节介绍的是I2C每一位信号的时序流程,而I2C通信在字节级的传输中,也有固定的时序要求。I2C通信的起始信号(Start)后,首先要发送一个从机的地址,这个地址一共有7位,紧跟着的第8位是数据方向位(R/W)&…...

2026好事花生:河源AI新突破,智能科技改变未来生活

随着人工智能技术的飞速发展,各行各业都在积极探索如何利用AI提升效率和优化服务。在广东省,有一家公司正在通过其创新的AI解决方案,为众多企业带来革命性的变化。这家公司就是广东省好事花生传媒有限公司(以下简称“好事花生”&a…...

sizeof(unique_ptr) 不总是 8——从 default_delete 到 compressed_pair,拆解零开销承诺的三层实现

"unique_ptr 是零开销的,sizeof 等于裸指针。"这句话在网上传了十几年。面试会问,博客会写,同事之间也会这么说。 它对吗?对,但只对了三分之一。 在 64 位系统上跑一段代码: struct FileCloser {void operator()(FILE* f) const {if (f)...

零基础入门网安|6_个月从小白到拿offer,怎么学的?

零基础入门网安|6 个月从小白到拿offer,怎么学的? 有粉丝说刷到 “网安工程师月薪 30K” 时心潮澎湃,点开教程却直接懵了 ——“TCP/IP 协议”“Linux 命令”“漏洞挖掘” 堆在一起,不知道从哪下手。跟风装了 Kali 系统…...

2026 AI应用元年:成败不靠模型,全看落地速度

业内已经形成共识:2026不是大模型升级年,而是AI真正的应用元年。过去几年,行业一直在卷参数、卷跑分、卷多模态噱头。企业买了模型、开了账号、做了演示Demo,但始终停留在聊天、写文案、生成代码片段的表层试用,好看不…...

原电脑只运行了:npm install -g openclaw 要把它迁移到一个新电脑,怎么操作,菜鸟教程

好的,这份菜鸟教程会帮你把原电脑上的 OpenClaw 完整“搬家”到新电脑,所有配置、密钥、聊天记录都会原样保留。📦 准备工作:原电脑上打包数据 在原电脑上操作。关闭 OpenClaw 网关 打开 PowerShell(管理员身份&#x…...

spring-boot-starter-validation字段数据校验

validation 概述 spring-boot-starter-validation 是 Spring Boot 官方提供的用于数据校验的启动器,它基于 Bean Validation API (JSR 380) 标准,并默认使用 Hibernate Validator 作为其实现。这个框架能让你通过声明式的注解,轻松地对控制器…...

Realistic Vision V5.1虚拟摄影棚应用场景:自媒体人像封面批量制作

Realistic Vision V5.1虚拟摄影棚应用场景:自媒体人像封面批量制作 你是不是也遇到过这样的烦恼?作为自媒体创作者,每周都要为文章、视频、播客设计封面图,尤其是需要突出人物形象的封面。找模特拍摄?成本太高&#x…...

**发散创新:基于Python与卫星互联网的轻量化边缘计算任务调度系统设计实践**在当前全球

发散创新:基于Python与卫星互联网的轻量化边缘计算任务调度系统设计实践 在当前全球卫星互联网(如Starlink、OneWeb等)快速发展的背景下,地面终端与天基节点之间的协同计算正从理论走向落地。传统的云计算架构难以满足低延迟、高可…...

[APP微信登录] 登录失败:, {“errMsg“:“login:fail 业务参数配置缺失,https://ask.dcloud.net.cn/article/282“,“code“:-7}

在 uni-app 里做 APP 微信登录时,很多人会遇到这个报错。 现象是:uni.login({ provider: weixin }) 直接失败,返回 code: -7,提示“业务参数配置缺失”。 为什么加上 onlyAuthorize: true 就好了? 因为微信登录在 APP …...

Cincoze DS-1402模块化工业计算机评测与配置解析

1. Cincoze DS-1402模块化嵌入式计算机开箱与规格解析作为一名长期从事工业计算机评测的技术博主,最近有幸拿到了Cincoze DS-1402这款模块化嵌入式计算机的评测样机。这款设备最吸引我的地方在于其强大的扩展能力和工业级可靠性设计——它支持第12代Alder Lake-S和第…...

告别Burp Intruder!用Yakit的Web Fuzzer标签语法,5分钟搞定密码爆破与路径遍历

告别Burp Intruder!用Yakit的Web Fuzzer标签语法,5分钟搞定密码爆破与路径遍历 在渗透测试领域,Burp Suite的Intruder模块长期以来被视为Web应用安全测试的黄金标准。但任何资深安全工程师都清楚,Intruder的配置流程——从标记位置…...

从环境设置到使用YOLOv8对各种视角及场景的火灾烟雾数据集进行训练、推理以及评估 27000火灾烟雾数据集的训练及应用 涵盖无人机高速公路 工业场景等

从环境设置到使用YOLOv8对各种视角及场景的火灾烟雾数据集进行训练、推理以及评估 27000火灾烟雾数据集的训练及应用 涵盖无人机高速公路 工业场景等 文章目录环境配置1. 安装CUDA驱动2. 安装Anaconda3. 创建Python虚拟环境4. 安装依赖项数据准备使用YOLOv8进行训练、推理和评估…...

大模型面试通关秘籍:面试官亲划的5大核心考点(附满分回答模板)

别再背500页的面试宝典了!Transformer、RAG、Agent、工程化...真正能帮你拿Offer的,只有这5张表前言:面试官到底想听什么?很多候选人面试大模型岗位时,最大的误区就是“背概念而不是讲逻辑”。举个例子:问“…...

从迭代器到生成器

迭代器?你有没有想过在python里for i in lit遍历一个列表,他究竟干了什么,为什么有的变量可以循环,而有的不可以for遍历?就比如说for i in 2,对一个数字遍历会报错TypeError: int object is not iterable,这句话意思是int对象不是…...

【限时首发|Docker官方认证架构师亲授】:2026版Toolkit如何实现「零配置多模态训练容器化」?附可运行的架构验证代码库

更多请点击: https://intelliparadigm.com 第一章:Docker AI Toolkit 2026 发布背景与核心定位 随着大模型本地化推理、边缘AI训练和多模态工作流编排需求激增,容器化AI开发正从“可选实践”演进为“工程刚需”。Docker AI Toolkit 2026 应运…...

【AI 应用】前端接口联调工程化:把 Swagger 接入沉淀成可复用 Skill

前言 这篇文章适合两类读者:一类是在做前端联调的开发者,另一类是在做 AI Agent 落地的工程实践者。 核心问题很现实:给了 Swagger 文档后,AI 不是不会写请求,而是经常出现接口接反、字段猜错、页面样式漂移、失败归因…...

四博 ESP32-S3 三模联网 AI 音箱技术方案

四博 ESP32-S3 三模联网 AI 智能音箱技术方案1. 方案定位四博 AI 智能音箱是一套基于 ESP32-S3 主控平台打造的多模态语音 AI 硬件方案,面向 AI 音箱、AI 陪伴、儿童教育、智能家居入口、品牌客服终端、户外移动 AI 设备和 B 端批量集成市场。方案核心能力可以概括为…...

地图层级·学习笔记

“最后,我会告诉你关于 Map 的事。” “Map,如你所知,存储了一组键值对。键必须是唯一的,但值可以是任何东西。如果你在一个Map中添加一个键值对,并且集合已经包含键,那么旧值将被新值替换。换句话说,键就像一个特殊的索引,可以是任何对象。” 映射是一个数学术语,表…...

枚举(Enum)不只是常量:打造带有业务逻辑的强类型状态机

枚举(Enum)不只是常量:打造带有业务逻辑的强类型状态机在Java等编程语言中,枚举(Enum)通常被视为简单的常量集合,但实际上它们是功能强大的工具,可以构建带有业务逻辑的强类型状态机…...

Orbitrap质谱20余年如1梦

摘要 本文综述了Orbitrap质谱作为主流高分辨准确质量(HR/AM) 技术问世的20年发展历程。文章梳理了Orbitrap分析器的研发历史、主流仪器系列的演进脉络,以及推动其广泛应用的关键技术创新;重点阐述混合与3合&#xff1…...

idea控制台如何实时grep搜索?

安装Grep Console 插件即可,运行时右键即可配合ctrl f 实现实时过滤,高亮显示 ;...

Locale Emulator:Windows多语言环境模拟的终极解决方案

Locale Emulator:Windows多语言环境模拟的终极解决方案 【免费下载链接】Locale-Emulator Yet Another System Region and Language Simulator 项目地址: https://gitcode.com/gh_mirrors/lo/Locale-Emulator 你是否曾因日文游戏显示乱码而烦恼?是…...

云原生入门系列|第20集:新手进阶提升,K8s新趋势+面试重点+实操提速

前言 各位云原生入门的小伙伴,欢迎来到《云原生入门系列》最后一集——第20集!上一集我们完成了全系列知识点复盘和综合实战演练,巩固了生产级运维核心能力,也明确了后续进阶方向。 作为系列收官之作,这一集我们不做重复复盘,也不讲解晦涩的新知识点,重点帮大家解决三…...

锐捷和H3C交换机STP配置命令对比:手把手教你开启并选对模式(STP/RSTP/MSTP)

锐捷与H3C交换机生成树协议配置全解析:从基础命令到模式选择实战 在现网环境中,生成树协议(STP)的配置是网络工程师的必修课。不同厂商的设备在STP实现上存在细微但关键的差异,这常常成为配置过程中的"暗礁"…...

【Java 25 FFI终极指南】:20年JVM专家亲授外部函数接口增强的5大生产级落地陷阱与避坑清单

更多请点击: https://intelliparadigm.com 第一章:Java 25 FFI增强的演进脉络与核心定位 Java 25 引入的 Foreign Function & Memory API(FFI)正式版标志着 JVM 与原生世界交互范式的根本性跃迁。它不再依赖 JNI 的脆弱桥接与…...

链开源免费的WPS AI 软件 察元AI文档助手:路 013:shouldUsePlainDocumentPipeline 与批注类动作分流

链路 013:shouldUsePlainDocumentPipeline 与批注类动作分流 总体链路图 下图在全系列各篇保持一致,仅通过高亮样式标示本篇所覆盖的环节;箭头表示主成功路径,点线为异常或可选路径。阅读任意一篇时都应能回到本图定位&#xff…...

3分钟解决B站缓存播放难题:m4s-converter无损转换完整指南

3分钟解决B站缓存播放难题:m4s-converter无损转换完整指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾遇到过这样的困境…...

日常实用娱乐向|无需下载任何播放器!万能M3U8在线播放神器,追剧看直播永久备用

开篇前言 不管是电脑办公闲暇追剧,还是手机随身看各类直播源、高清影视资源,很多优质流媒体资源都是M3U8格式。但用过的朋友都知道,这种格式非常特殊,电脑自带播放器无法直接打开,手机普通视频软件也不支持解析。专门…...

前端八股文面经大全:字节抖音前端三面(2026-04-27)·面经深度解析

前言 大家好,我是木斯佳。 相信很多人都感受到了,在AI浪潮的席卷之下,前端领域的门槛在变高,纯粹的“增删改查”岗位正在肉眼可见地减少。曾经热闹非凡的面经分享,如今也沉寂了许多。但我们都知道,市场的…...