IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32G4 蓝桥杯竞赛板 IIC AT24C02储存器 -> 正文阅读

[嵌入式]STM32G4 蓝桥杯竞赛板 IIC AT24C02储存器

此模块是我初次接触到数据手册,也是第一次接触到通讯协议,所以在b站录有视频,包括IIC的原理,以及在蓝桥杯竞赛板上实现对EEPROM的读写,感兴趣可移步:

STM32G431 蓝桥杯嵌入式 AT24C02储存应用程序设计_哔哩哔哩_bilibili

一、I2C通信协议简介

????????I2C 通信协议(inter-integrated circuit)因为使用引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)之间的通讯。

I2C物理层的特点

????????

  • 1.它是一个支持多设备的总线。 “总线” 指多个设备共用的设备信号线。在一个I2C通讯总线中,可? ? ? 连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机

2.一个I2C总线只使用两条总线线路,一条双向串行数据线(SDA),一条串行时钟线(SLC)。? ? ?数据线即用来表示数据,时钟线用于数据收发同步。

3.每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。

4.总线通过上拉电阻接到电源。当I2C设备空闲时,会输出高组态,当所有设备都空闲时,由上拉? ? ?电阻把总线拉成高电平。

5.多个主机同时使用总线时,为防止数据冲突,会利用仲裁方式(类似位与运算)决定由哪个设备? ? ?占用总线

6.具有三种传输模式:标准模式(100kbit/s),快速模式(400kbit/s),高速模式(3.4Mbit/s),? 但目前大多数I2C设备不支持高速模式。

7.连接到相同总线的IC数量受到总线的最大电容400pF限制。

I2C的协议层:

I2C的协议定义了通讯的起止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。

  1. I2C基本读写过程

通讯的起始和停止信号

当SCL线是高电平时 SDA线从高电平向低电平切换,这个情况表示通讯的起始。

当SCL线是高电平时 SDA线从低电平向高电平切换,这个情况表示通讯的停止。

起始和停止信号一般由主机产生。

数据有效性

????????

?I2C使用SDA信号线来传输数据,使用SCL信号线进行数据同步。

SDA数据线在SCL的每个时钟周期传输一位数据。

  1. SCL为高电平时SDA表示的数据有效,即此时的SDA为高电平时表示数据 “1”,为低电平时表示数据“0”。
  2. 当SCL为低电平时,SDA的数据无效,一般在这个时候SDA进行电平切换,为下一次表示数据做好准备。

地址及数据方向

  1. I2C总线上的每个设备都有自己独立的地址,主机发起通讯时,通过SDA信号线发送设备地址来查找从机。设备地址可以是7位或10位。
  2. 紧跟设备地址的一个数据位R/W用来表示数据的传输方向,数据方向位“1”时表示主机由从机读数据,该为为“0”时表示主机向从机写数据。

响应

I2C的数据和地址传输都带响应。响应包括“应答(ACK)”和“非应答(NACK)”两种信号。

传输时主机产生时钟,在第九个时钟时,数据发送端会释放SDA的控制信号权,由数据接收端控制SDA,若SDA为高电平,表示非应答信号,低电平表示应答信号。

二、STM32的I2C控制器特性

三、I2C读写EEPROM实验?

字节写

页写

注意:当页写数据大于八字节时,应更换写入地址

当前地址读

?

随机读

?

连续读

?AT24C02读写函数代码如下:

// AT24C02 写 
void i2c_write(unsigned char* pucBuf, unsigned char ucAddr, 

unsigned char ucNum) 
{ 
I2CStart();                   //开始信号
I2CSendByte(0xa0);          //发送从机地址 0xA0为写 
I2CWaitAck(); 				// 等待响应

I2CSendByte(ucAddr);       //发送寄存器地址(即数据存入的地址)
I2CWaitAck(); 				//等待响应

while(ucNum--)           //循环写入数据
{ 

I2CSendByte(*pucBuf++);    //指针后移
I2CWaitAck();  

} 

I2CStop();                    //停止信号
delay1(500);                  //延时

} 

?

// AT24C02 读 
void i2c_read(unsigned char* pucBuf, unsigned char ucAddr, 

unsigned char ucNum) 
{ 

I2CStart();                      //开始信号
I2CSendByte(0xa0);             //发送从机地址,0xA0为写         
I2CWaitAck();                  //等待响应

I2CSendByte(ucAddr);          //发送寄存器地址(即数据存入的地址)
I2CWaitAck(); 	  			  //等待响应
          
I2CStart();             		//第二次开始信号            
I2CSendByte(0xa1);           //发送从机写地址
I2CWaitAck(); 				//等待应答
while(ucNum--)         //循环读出数据                 
{ 
*pucBuf++ = I2CReceiveByte();    //指针后移 连续读出数据至pucBuf字符数组中
if(ucNum)    					//如果数据没有读完,就发送响应信号,接着读
I2CSendAck();                   
else                             //如果读完则不发送响应,停止读出数据
I2CSendNotAck(); 
} 
I2CStop();   
} 

?

?

?

?

?

?

?

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:58:46  更:2022-04-18 17:59:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:18:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码