i2c总线应用背景(I2C总线协议简介)
i2c总线应用背景(I2C总线协议简介)二、I2C总线在传送数据过程中共有三种类型信号:开始信号、结束信号和应答信号。• 连接到相同总线的IC 数量只受到总线的大电容400pF 限制• 它是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏• 串行的8 位双向数据传输位速率在标准模式下可达100kbit/s 快速模式下可达400kbit/s 高速模式下可达3.4Mbit/s• 片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整
在物联仓储系统和智能小车中,很多情况下都需要使用I2C总线协议进行数据传输,本文将对该协议做一个简单的整理介绍。
一、I2C 总线的一些特征:
• 只要求两条总线线路一条串行数据线SDA 一条串行时钟线SCL
• 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址主机可以作为主机发送器或主机接收器
• 它是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏
• 串行的8 位双向数据传输位速率在标准模式下可达100kbit/s 快速模式下可达400kbit/s 高速模式下可达3.4Mbit/s
• 片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整
• 连接到相同总线的IC 数量只受到总线的大电容400pF 限制
二、I2C总线在传送数据过程中共有三种类型信号:开始信号、结束信号和应答信号。
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。程序如下所示:
起始和结束:
bool I2C_Start(void)
{
SDA_H;
SCL_H;
I2C_delay();
if(!SDA_read)return FALSE; // SDA线为低电平则总线忙 退出
SDA_L; // 拉低SDA线(当SCL为高电平时,SDA由高电平向低电平跳变表示开始信号)
I2C_delay();
if(SDA_read) return FALSE; // SDA线为高电平则总线出错 退出
SDA_L; //数据为准备好时,拉低SCL线
I2C_delay();
return TRUE;
}
嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。(点击找小助理领取)
发出开始信号之后,设备在数据未准备好时,拉低SCL线,这样主设备可知从设备未发送数据,从设备在数据准备好,可以发送的时候,停止拉低SCL线,这时候才开始真正的数据传输。程序如下所示:
void I2C_Stop(void)
{
SCL_L;
I2C_delay();
SDA_L;
I2C_delay();
SCL_H; // SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据
I2C_delay();
SDA_H;
I2C_delay();
}
STOP在单主环境下非必要,但在多主环境就非常必要,主控总线的设备发送STOP后,通知总线其他设备总线已经闲置。
void I2C_Ack(void)
{
SCL_L;
I2C_delay();
SDA_L;
I2C_delay();
SCL_H;
I2C_delay();
SCL_L;
I2C_delay();
}
当主机作为接收设备时,主机对后一个字节不应答,以向发送设备(从设备)标识数据传送结束。这是因为每次传输都应得到应答信号后再进行下一个字节传送。如果此时接收机应答了,那它就接收的不是后一个字节了。如果是后一个字节,第9个时钟周期发送的是非应答信号(此时发送的不是应答信号就是非应答信号),后发送停止信号。
1)主发从收:主START->主发地址->从ACK->(主发数据->从ACK(循环))->主STOP或主 START启动下一次传输,这一过程中,主控SCL线,从只在ACK时控SDA线,其他时刻主控SDA线。
2)主收从发:主START->从发地址->主ACK->(从发数据->主ACK(循环))->接受至后一个字节时,主 NACK->主 STOP 或主START启动下一次传输。注意,并非每传输8位数据之后,都会有ACK信号,有以下3中例外
(1)当从机不能响应从机地址时(例如它正忙于其他事而无法响应IIC总线的操作,或者这个地址没有对应的从机),在第9个SCL周期内SDA线没有拉低,即没有ACK信号。这时,主机发出一个P信号终止传输或者重新发出一个S信号开始新的传输。
(2)如果从机接收器在传输过程中不能接收更多的数据时,它不会发出ACK信号。这样,主机就可以意识到这点,从而发出一个P信号终止传输或者重新发出一个S信号开始新的传输。
(3)主机接收器在接收到后一个字节后,也不会发出ACK信号。于是,从机发送器释放SDA线,以允许主机发出P信号结束传输。
位传输:
主机向从机发送一字节数据
void I2C_SendByte(u8 SendByte) //数据从高位到低位
{
u8 i=8;
while(i--)
{
SCL_L;
I2C_delay();
if(SendByte&0x80)
SDA_H;
else
SDA_L;
SendByte<<=1;
I2C_delay();
SCL_H;
I2C_delay();
}
SCL_L;
}
三、7位寻址
在起始条件S 后发送了一个从机地址,这个地址共有7 位,紧接着的第8 位是数据方向位R/W ,0表示发送写、1表示请求数据读:
数据传输一般由主机产生的停止位P终止,但是如果主机仍希望在总线上通讯它可以产生重复起始条件Sr和寻址另一个从机,而不是首先产生一个停止条件。
那么在完整的数据传输过程中,stm32如何建立与EEPROM的通讯
1、 配置I/O端口,确定并配置I2C的模式,使能GPIO和I2C时钟。
2、 写:
检测SDA是否空闲;
->按I2C协议发出起始讯号;
->发出7位器件地址和写模式;
->要写入的存储区首地址;
->用页写入方式或字节写入方式写入数据;
3、 读:
检测SDA是否空闲;
->按I2C协议发出起始讯号;
->发出7位器件地址和写模式(伪写);
->发出要读取的存储区首地址;
->重发起始讯号;
->发出7位器件地址和读模式;
->接收数据;
6.计算机网络地址ip分类计算机网络地址共分为五类:A类、B类、C类、D类、E类。
一, IP地址介绍
Ip地址=网络号 主机号
把整个Internet网视为单一的网络,ip地址就是给每个连接在Internet网的主机分配一个全世界范围的唯一标识,其中这些网络大致的被分为以下5中。
二,具体介绍这五种ip的特点
A类地址
A类地址的表示范围为:0.0.0.0~126.255.255.255,默认网络掩码为:255.0.0.0;A类地址分配给规模特别大的网络使用。A类网络用第一组数字表示网络本身的地址,后面三组数字作为连接于网络上的主机的地址。分配给具有大量主机(直接个人用户)而局域网络个数较少的大型网络。例如IBM公司的网络。
B类地址:
B类地址的表示范围为:128.0.0.0~191.255.255.255,默认网络掩码为:255.255.0.0;B类地址分配给一般的中型网络。B类网络用第一、二组数字表示网络的地址,后面两组数字代表网络上的主机地址。
C类地址:
C类地址的表示范围为:192.0.0.0~223.255.255.255,默认网络掩码为:255.255.255.0;C类地址分配给小型网络,如一般的局域网和校园网,它可连接的主机数量是少的,采用把所属的用户分为若干的网段进行管理。C类网络用前三组数字表示网络的地址,后一组数字作为网络上的主机地址。
D类地址:
D类地址主要是用于组播,前面4位主要起的作用是引导,后面28位位组播的地址ID。
E类地址:
总是以1111四位引导 ,E类地址用于研究用。
三:特殊的IP地址
1. 网络地址:
IP中主机地址为0的地址表示网络地址,如128.211.0.0。
2. 广播地址:
网络号后跟所有位全是1的后缀,就是直接广播地址。
3. 回送地址:
即127.0.0.1,用于测试。
嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。点击文中文蓝色字领取