ARM学习笔记(8)

发布时间:2026/9/24 10:22:24
ARM学习笔记(8) 今天整理 i2c 的笔记总线这个东西看着简单把时序捋清楚也就通了大半。I2C 是什么I2C 是两根线的串行通信总线一根 SCL 时钟线、一根 SDA 数据线。靠地址寻址从机地址是 7 位最多能挂 127 个从机。起始信号之后发的第一个字节很有讲究高 7 位是设备地址低 1 位是数据流向。最低位是 0 表示主机写数据给从机是 1 表示从机读数据给主机。比如笔记里记的 0x10 展开成二进制就是 0001 0001 。I2C 的通信速率分几档100 kHz、400 kHz、1.x M、3.x M用得最多的是标准 100k 和快速 400k。I2C 时序时序核心就是 SCL 和 SDA 两条线的电平配合分四步- 起始信号SCL 为高电平时SDA 从高变低出现下降沿- 数据传输SCL 高电平期间SDA 电平保持稳定接收方在这个窗口采样SCL 低电平期间SDA 可以随意改变发送方趁这段时间发数据- 应答信号第 9 个时钟周期接收方向发送方回复应答——低电平是 ACK高电平是 NACK- 结束信号SCL 为高电平时SDA 从低变高出现上升沿把收发两端和电平对上写驱动时思路就顺了// 起始信号SCL 高电平时SDA 高-低static void i2c_start(void){SDA 1; SCL 1;SDA 0; // 下降沿SCL 0;}// 结束信号SCL 高电平时SDA 低-高static void i2c_stop(void){SDA 0; SCL 1;SDA 1; // 上升沿}// 发一个字节SCL 低电平时放数据高电平时采样static void i2c_write_byte(unsigned char data){for (int i 0; i 8; i){SCL 0;SDA (data 0x80) ? 1 : 0; // 先发高位data 1;SCL 1; // 接收方在高电平采样}}寄存器访问外设的寄存器映射在地址空间里从 0xFF 一路排到 0x00 每个寄存器对应一块存储单元。读写的时候按地址去操作寄存器位就行这也是 I2C 最常见的应用场景——挂个传感器、EEPROM 之类就是往它寄存器地址里读写数据。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询