IIC总线协议—读写EEPROM
IIC总线协议—读写EEPROM
1、I2C简介
I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。
2、I2C物理层
I2C总线只需要两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线 (SCL)。SDA线用来装载数据,SCL线用于控制收发。I2C支持多设备的总线。支持多个通讯主机及多个通讯从机。
3、I2C协议层
3.1、协议层总述
当时钟线为高电平时,数据线必须为固定状态。因为时钟线为高电平时,数据线任何变化都会产生开始信号、结束信号。
IIC总共有三种信号:
开始信号:SCL=1 & SDA下降沿触发
传输信号:SCL=0、SCL=1、SCL=0(传输SDA已装载数据)
结束信号:SCL=1 & SDA上升沿触发
下图是IIC传输协议,图中Bn是数据,S代表Start,P代表Pause
3.2、Bn数据的读写
4、EEPROM简介
EEPROM是指带电可擦除可编程的只读存储器,是一类芯片的总称,具有掉电后数据不丢失的特性。
4.1、AT24C02芯片
stm32f103开发板采用的是AT24C02芯片进行I2C 协议传输。工作电压范围:1.8V ~6.0V。采用低功耗CMOS 技术制造。当WP 为高电平时,AT24C02进入写保护状态。
AT24C02芯片使用手册
https://github.com/ruanpei1010/3work_PDF/blob/master/26_AT24c02中文资料.pdf
引脚介绍:
| 编号 | 名称 | 功能 |
|---|---|---|
| 1-3 | A0、A1、A2 | A2、A1和A0输入引脚作为硬件地址,AT24C02都是0 |
| 4 | GND | 接地 |
| 5 | SDA | 装载串行数据 |
| 6 | SCL | 时钟线,上升沿写入,下降沿读出 |
| 7 | WP | 读写控制,接Vcc只读,接地或悬空正常读写 |
| 8 | Vcc | 高电平 |
4.2、AT24C02地址约定
芯片AT24C02在开发板上的外设地址,有如下约定:1010前四位固定,后四位A2\A1\A0用不到,R\W`是读写位(0代表写入,1代表读取)。也就是说AT24C02作为EEPROM外设,只可能出现写读两种地址:10100000和10100001(0xA0和0xA1)

4.3、例程代码
完整代码
完整代码挂在github,例程名DEMO05_IIC_EEPROM1
例程复刻野火stm32f103vet指南者代码,
开发环境:野火stm32f103vet6,gcc编译环境,CubeMX,dap仿真器
CubeMX配置IIC
相关HAL函数简介:
HAL_StatusTypeDef HAL_I2C_Mem_Write(...)
| HAL_StatusTypeDef HAL_I2C_Mem_Write | ( | I2C_HandleTypeDef * | hi2c, |
|---|---|---|---|
| uint16_t | DevAddress, | ||
| uint16_t | MemAddress, | ||
| uint16_t | MemAddSize, | ||
| uint8_t * | pData, | ||
| uint16_t | Size, | ||
| uint32_t | Timeout | ||
| ) |
@brief 向内存中写数据
@arg 第一个参数为 I2C 操作句柄。
@arg 第二个参数为 EEPROM 的写操作设备地址。
@arg 第三个参数为内存地址。
@arg 第四个参数为内存地址长度,EEPROM 内存长度为 8bit。
@arg 第五个参数为数据缓存的起始地址。
@arg 第六个参数为传输数据的大小。AT24C02 型号的芯片页写入时序最多可以一次 发送 8 个数据,其他芯片也有 16 位传输。
@arg 第七个参数为操作超时时间。
同理:
HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
完整代码挂在github,例程名DEMO05_IIC_EEPROM1
IIC总线协议—读写EEPROM的更多相关文章
- 十天学会单片机Day5 IIC总线AT2402芯片(EEPROM)应用
1.采用串行总线技术可以使系统的硬件设计大大简化.系统的体积减小.可靠性提高.同时,系统的更改和扩充极为容易. 常用的串行扩展总线有: IIC (Inter IC BUS)总线.单总线(1-WIRE ...
- IIC总线协议---以存储芯片at24c64为例
IIC总线协议 前言:年前给老师做个红外抄表系统,,现在对当中用到的一些模块总结一下. 1.只有在总线空闲时才允许启动数据传送. 2.在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态,不允 ...
- IIC总线协议基础1
文档类别 文档标识 IIC总线协议基础1 当前版本号 V0.2 作 者 Louis 完毕时间 2015-05-27 IIC总线协议基础1 IIC总线协议基础1. 1. II ...
- 用I/O口模拟IIC总线协议遇到的一些问题
最近做的一个项目,是基于IIC总线通信的传感器系统.由于另外一个传感器使用的是类IIC协议,而不是标准IIC,所以MCU不能与其通信,最后没有办法,只有通过I/O口模拟的方式实现IIC的总线通信.具体 ...
- IIC总线协议
前言:年前给老师做个红外抄表系统,,现在对当中用到的一些模块总结一下. 1.只有在总线空闲时才允许启动数据传送. 2.在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态,不允许有跳变.时钟线 ...
- IIC总线协议和时序
IIC标准速率为100Kbit/s,快速模式400Kbit/s,支持多机通信,支持多主控模块,但是同一时刻只允许有一个主控.由数据线SDA和时钟SCL构成串行总线:每个电路模块都有唯一地址.I2C设备 ...
- ARM裸板开发:07_IIC 通过IIC总线接口读写时钟芯片时间参数实现的总结
问题一:程序直接在iRAM内部可正常执行,而程序搬移(Nand ->SDRAM)之后,就不能正常运行了 #define NAND_SECTOR_SIZE 2048 /* 读函数 */ void ...
- 第十六章 IIC协议详解+UART串口读写EEPROM
十六.IIC协议详解+Uart串口读写EEPROM 本文由杭电网友曾凯峰根据小梅哥FPGA IIC协议基本概念公开课内容整理并最终编写Verilog代码实现使用串口读写EEPROM的功能. 以下为原文 ...
- C51—模拟IIC总线实现EEPROM存取数据
a - 什么是IIC总线 -什么是EEPROM -IIC总线的通信格式 模块化设计注解 整体代码 - 什么是IIC总线 IIC总线是同步通信的一种特殊形式,具有接线口少.控制简单.器件封装形式小.通信 ...
- 【接口时序】6、IIC总线的原理与Verilog实现
一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE .ChipScope 硬件平台: 1. FPG ...
随机推荐
- 杭电OJ刷题指南(ACM)
杭州电子科技大学Oj是著名的算法竞赛刷题网站!!
- Verilog中的时间尺度与延迟
在Verilog的建模中,时间尺度和延迟是非常重要的概念,设置好时间尺度和延迟,可以充分模拟逻辑电路发生的各种情况和事件发生的时间点,来评估数字IC设计的各种要求,达到充分评估和仿真的作用.注意延迟语 ...
- 在Eclipse 中导入maven项目, progress对话框中出现importing maven project的进度条卡住
一.在Eclipse配置Maven 方法1:在Eclipse上下载,太慢了,不用 方法2:在电脑本地下载,然后Eclipse载入 二.方法2详细步骤 1.官网下载:http://maven.apach ...
- 十大经典排序之堆排序(C++实现)
堆排序 通过将无序表转化为堆,可以直接找到表中最大值或者最小值,然后将其提取出来,令剩余的记录再重建一个堆, 取出次大值或者次小值,如此反复执行就可以得到一个有序序列,此过程为堆排序. 思路: 1.创 ...
- 【原创】android 7.0 通知报错 java.lang.SecurityException: You need MANAGE_USERS permission to: check if specified user a managed profile outside your profile group
项目中在后台发送通知,突然某一天测出在Android 7.0上通知发送失败,那么根据提示,我们尝试加了MANAGE_USERS权限,看起来是个系统级别权限,验证后果然无效.接着在搜索后都无果,似乎大家 ...
- C# 定时任务模拟,请求二十万数据
定时器请求二十万数据 最近遇到一个问题,api接口,因为数据内容转换处理.一页1万条数据处理速度3秒以上.假设二十万条数据,分页请求二十次,总共花费时间1分钟以上. 解决这个问题,我第一时间想到并发, ...
- 手机设置网络代理后,网络不可用之app-jmeter性能测试
1.检查crt证书是否安装 (手机) 2.Jmeter设置HTTP代理端口和ip与手机设置代理参数一致即可
- 第一天1h
//摄氏度和华氏度之间的换算//20211120//ZhangWenjing#include<stdio.h>int main(void){ int f = 0; int c = 0; s ...
- 将成员服务器ms1加到AD域中
1.对ms1的ipv4设置,dns对应地址dc1服务器地址 2.修改计算机名,并加入域 重启后 2.以域用户登录方式有两种 1. 2. 检查ms1有没有加入dc1的域中 在dc1
- For循环用法-打印乘法表
for循环可以遍历某一对象(遍历:通俗点说,就是把这个循环中的第一个元素到最后一个元素依次访问一次).for循环的结构如下 具体例子打印乘法表: #打印乘法表: for i in range(1, ...