I2C是什么
展开全部 I2C(Inter-Integrated Circuit)是内部整合电路的称呼,是一种串行通讯总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边装置而发展。
I2C(读作"I-squared-C" ),还有可选的拼写方式是I2C(读作I-two-C)以及IIC(读作I-I-C),在中国则多以"I方C"称之。
I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。
是微电子通信控制领域广泛采用的一种总线标准。
它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。
I2C 总线支持任何IC 生产过程(CMOS、双极性)。
通过串行数据(SDA)线和串行时钟 (SCL)线在连接到总线的器件间传递信息。
每个器件都有一个唯一的地址识别(无论是微控制器——MCU、LCD 驱动器、存储器或键盘接口),而且都可以作为一个发送器或接收器(由器件的功能决定)。
LCD 驱动器只能作为接收器,而存储器则既可以接收又可以发送数据。
除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机(见表1)。
主机是初始化总线的数据传输并产生允许传输的时钟信号的器件。
此时,任何被寻址的器件都被认为是从机。
特征: 1、只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL; 2、每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器; 3、它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏; 4、串行的8 位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s; 5、连接到相同总线的IC 数量只受到总线的最大电容400pF 限制。
【详细资料请参阅百度百科《I2C》或《IIC》】...
请教一个修改I2C地址的问题
IIC上的每个器件是否都要一个地址寄存器来确定自己的地址:很多器件都是通过硬件来确定地址的。
有的在出厂时地址就设置好了,用户不可以更改,有的确定了几位,剩下几位由硬件确定(比如有三位由用户确定,就留有3个控制地址的引脚),此类较多;还有的有地址寄存器。
严格讲,主机不是向从机发送地址,而是主机往总线上发送地址,所有的从机都能接收到主机发出的地址,然后每个从机都将主机发出的地址与自己的地址比较,如果匹配上了,这个从机就会向主机发出一个响应信号。
主机收到响应信号后,开始向总线上发送数据,与这个从机的通讯就建立起来了。
如果主机没有收到响应信号,则表示寻址失败。
比如带IIC的单片机,会有地址寄存器,寄存器里的值即为它作为从机时的地址。
最常见的情况,主从器件的角色是确定的,也就是说从机一直工作在从机模式。
它的地址确定方法我已经说过了。
不同的器件定义地址的方式是不同的,有的是软件定义,有的是硬件定义。
为什么会出现串口通信,I2C通信,SPI通信,UART通信等等这么多...
UART用在与主机(比如计算机)接口外设相连。
I2C是由飞利浦公司提出的,用于与芯片与芯片之间的通信。
spi是摩托罗拉最先提出的,用于芯片与芯片间的通信,与i2c不同的是传输需要四根线,i2c传输需要两根线,所以速率比i2c快。
最早是没有统一的串行接口标准的,各个公司在自己的领域分别提出来,最终成为了通用的标准。
I2C总线的特征
展开全部 1、只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL;2、每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器;3、它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏;4、串行的8 位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s;5、连接到相同总线的IC 数量只受到总线的最大电容400pF 限制。
...
ZLG7290的软件库及调用说明
(1)I2C头文件库⑴ void I2C_Delay(); I2C延时程序⑵ void I2C_Init(); I2C 总线初始化,使总线处于空闲状态⑶ void I2C_Start(); 产生I2C 总线的起始状态⑷ void I2C_Write(char dat); 向I2C 总线写1 个字节的数据⑸ char I2C_Read(); 从从机读取1 个字节的数据⑹ bit I2C_GetAck(); 读取从机应答位⑺ void I2C_PutAck(bit ack); 主机产生应答位或非应答位⑻ void I2C_Stop(); 产生I2C 总线的停止状态⑼ void idle(); 将I2C总线置于空闲状态,即将时钟线和数据线都拉高⑽ bit I2C_Puts(unsigned char SlaveAddr,unsigned int SubAddr,unsigned char SubMod,char *dat,unsigned int Size); I2C 总线综合发送函数,向从机发送多个字节的数据⑾ bit I2C_Gets(unsigned char SlaveAddr,unsigned int SubAddr,unsigned char SubMod,char *dat,unsigned int Size);I2C 总线综合接收函数,从从机接收多个字节的数据⑿ char gets2(unsigned char subaddr);(2)ZLG7290函数库首先要包含另一个库ZLG7290B.h,里面定义了ZLG7290的各个寄存器地址和它本身的地址。
而zlg7290.h包含的函数如下:⑴ bit ZLG7290_WriteReg(unsigned char RegAddr, char dat) 向ZLG7290 的某个内部寄存器写入数据⑵ unsigned char ZLG7290_ReadReg(unsigned char regaddr) 从ZLG7290 的某个内部寄存器读出数据⑶ bit ZLG7290_cmd(char cmd0, char cmd1) 向ZLG7290 发送控制命令⑷ bit ZLG7290_SegOnOff(char seg, bit b) 段寻址,单独点亮或熄灭数码管(或LED)中的某一段⑸ bit ZLG7290_Download(char addr, bit dp, bit flash, char dat) 下载数据并译码说明:⑴,⑵,⑶,⑷,⑸中的函数都有返回值,0表示正常返回,1表示访问ZLG7290 时出现异常。
(3)主函数ZLG7290B.c;void INT0_SVC() interrupt 0 中断服务函数void Delay1(unsigned int t) 延时函数void SystemInit() 系统初始化函数,用于初始化定时器和让ZLG7290复位void ClearAll() 清除所有数码管显示函数void Test_DispBuf() 测试直接写显存函数,void Test_Download() 测试下载数据函数void Test_ScanNum() 测试扫描不同数码管函数void Test_Flash() 测试闪烁功能函数void Test_SegOnOff() 测试段寻址函数,用于将数码管分段点亮void DispValue(char x, unsigned char dat) 以十进制显示数据函数void DispHexValue(char x, unsigned char dat) 以十六进制显示数据函数void Test_Key() 测试按键函数,自动读出键值并且在数码管上显示
24C02的主要应用:
1. 不同牌号24C02的性能区别24C02与单片机的接口非常简单,如下图所示。
E0,E1,E2为器件地址线,WP为写保护引脚,SCL,SDA为二线串行接口,符合I2C总线协议。
在一般单片机系统中,24C02 数据受到干扰的情况是很少的,但是随着单片机抗干扰性能的变差,以及恶劣工业环境中单片机系统的应用,一些智能单片机控制系统相继出现24C02数据被冲掉的问题,而且随着单片机的牌号以及24C02的牌号不同而出现不同程度的干扰现象。
以前通过简单的器件之间替换比较,发现不同牌号的24C02其抗干扰性能是不一样的,于是就认定24C02器件存在质量好坏的问题。
后来在一次偶然的机会里,发现有些24C02的WP引脚并不起到保护作用,也就是说将 WP引脚与CPU输出引脚断开并保持高电平的情况下,CPU仍然能够对24C02中的数据进行修改写入!在惊讶之余,笔者收集了许多不同牌号的24C02 进行试验,除了基本的读写功能外,还对地址功能以及WP引脚保护功能进行了全面的检测,发现一种ATMEL(激光印字)以及XICOR牌号的24C02具有全面的符合I2C总线协议的功能,而有些牌号24C02要么没有WP引脚保护功能,要么没有器件地址功能(即2 片24C02不能共用一个I2C总线),有些甚至两种功能均无。
所以说一些同样功能型号的电子器件在兼容性上往往会带来意想不到的问题,值得引起注意。
2. 24C02器件的选用 无论是智能仪器仪表还是单片机工业控制系统都要求其数据能够安全可靠而不受干扰,特别是一些重要的设定参数(如温度控制设定值)受到干扰后变成一个很大的数字,这时就有可能发生烧箱毁物的破坏性后果,给生产和经济带来损失,因此必须选用可靠的24C02器件作为数据储存单元。
对于只用一片24C02器件的系统,因为不需要分辨不同的地址,只要WP保护功能正常就可以了,这只要断开WP与CPU连线且保持高电平,再试一下系统数据读写功能是否正常就可以了。
而这一点对软件抗干扰技术也是至关重要的。
一般来说,同种牌号的24C02器件性能是一样的,可以采用抽样试验决定取舍;对于有2片24C02以上的系统,必须严格检查其器件寻址功能,这可以轮流拨下其中一片24C02器件,检查相应的数据存取功能,若没有交叉出错现象则可以选用。
3. 提高24C02数据安全的软件措施 (1)建议数据以十进制BCD码方式存入24C02,这样可以提高有效数据的冗余度,即24C02中的存储单元其有效数据为0-9,大于9则为无效数据。
这样,在数据写入24C02之前就可以插入校验子程序,对预备写入的数据进行检查,若该RAM数据已经受到干扰,其值大多数应落在大于9的范围内(可能性百分比系数为246/256),故此当数据大于9时就禁止执行写入24C02的子程序,以免错误数据写入24C02,而对正常需要修改的参数无影响。
(2) 24C02中数据保持冗余度后,还可以对读出数据进行检查,若为大于9的非正常数据,说明24C02中数据已经受到干扰,此干扰值是绝对不能用的,对于特定的系统可以采取不同的方法,比如带温度控制的培养箱等系统,如其温控范围为0~50℃,则数据出错后,读入值可能变成200℃或更高值,这是非常危险的,针对这种情况可以将设定值硬性规定为某一个安全值比如25℃,因为不知道原先设置的参数值,这也是无可奈何的事情。
(3)对写入24C02子程序设置软件口令,口令符合可以执行写入,否则拒绝写入。
具体做法是:设置写口令寄存器EPSW,按正常CPU执行程序的脉络,找出所有的数据写入24C02前的必经之路,比如,一般下在功能键按下后经过一些数据处理,最终将要保存的参数写入24C02,这时可以在键扫描子程序里,当有键输入时,对写口令寄存器EPSW置数5AH,然后在写24C02子程序中紧跟指令CLR WP后插入检查口令语句,判断EPSW值若为5AH,则允许继续执行,否则立即返回,不许执行写入数据。
当正确执行完写入24C02子程序后需对EPSW 清0,并且在主程序适当的地方加上EPSW清0指令,反复冗余执行。
这样程序受到干扰时,EPSW多数为0,即使EPSW数受到干扰时,也很少有机会刚好等于5AH,使错误数据非正常写入24C02的机会大大减少。
数据写入24C02子程序插入口令形式:WRIT: CLR WP MOV R1, #EPSW MOV A, @R1 CJNE A, #5AH,WERR …… ;数据写入24C02操作部分:WERR: SETB WP MOV R1, #EPSW MOV @R1, #0 RET 其编程顺序刻参考下面程序流程图4.保护24C02数据的硬件措施 在某些干扰特别严重的场合,24C02数据还是有可能被冲掉,最彻底的方法是利用硬件来干预写入数据过程。
一般情况下,是将WP引脚与CPU引脚断开,而与功能键连接起来,功能键没按下时,WP保持高电平,只有功能键按下时,WP才是低电平,允许写操作。
当然,这样一来对于某些过程量需要程控存入 24C02时就办不到了,这也是利用功能键同步保护24C02数据的一种不方便之处。
如果写入24C02的数据跟2 个按键有关,则可以用二极管隔离,采用如图2的形式。
这样两键本身互不影响,而任一键按下都能使WP变低,使数据写入操作有效,对于多键关联,依此类推多放几...
嵌入式系统是什么?有什么用?
展开全部 一 什么是嵌入式系统 嵌入式系统一般指非 PC 系统,有计算机功能但又不称之为计算机的设备或器材。
它是以应用为中心,软硬件可裁减的,适应应用系统对功能、可靠性、成本、体积、功耗等综合性严格要求的专用计算机系统。
简单地说,嵌入式系统集系统的应用软件与硬件于一体,类似于 PC 中 BIOS 的工作方式,具有软件代码小、高度自动化、响应速度快等特点,特别适合于要求实时和多任务的体系。
嵌入式系统主要由嵌入式处理器、相关支撑硬件、嵌入式操作系统及应用软件系统等组成,它是可独立工作的“器件”。
嵌入式系统几乎包括了生活中的所有电器设备,如掌上 PDA 、移动计算设备、电视机顶盒、手机上网、数字电视、多媒体、汽车、微波炉、数字相机、家庭自动化系统、电梯、空调、安全系统、自动售货机、蜂窝式电话、消费电子设备、工业自动化仪表与医疗仪器等。
嵌入式系统的硬件部分,包括处理器 / 微处理器、存储器及外设器件和 I/O 端口、图形控制器等。
嵌入式系统有别于一般的计算机处理系统,它不具备像硬盘那样大容量的存储介质,而大多使用 EPROM 、 EEPROM 或闪存 (Flash Memory) 作为存储介质。
软件部分包括操作系统软件 ( 要求实时和多任务操作 ) 和应用程序编程。
应用程序控制着系统的运作和行为;而操作系统控制着应用程序编程与硬件的交互作用。
二 嵌入式处理器 嵌入式系统的核心是嵌入式微处理器。
嵌入式微处理器一般具备 4 个特点: (1) 对实时和多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时操作系统的执行时间减少到最低限度; (2) 具有功能很强的存储区保护功能,这是由于嵌入式系统的软件结构已模块化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保护功能,同时也有利于软件诊断; (3) 可扩展的处理器结构,以能迅速地扩展出满足应用的高性能的嵌入式微处理器; (4) 嵌入式微处理器的功耗必须很低,尤其是用于便携式的无线及移动的计算和通信设备中靠电池供电的嵌入式系统更是如此,功耗只能为 mW 甚至μ W 级。
据不完全统计,目前全世界嵌入式处理器的品种总量已经超过 1000 种,流行的体系结构有 30 多个系列。
其中 8051 体系占多半,生产这种单片机的半导体厂家有 20 多个,共 350 多种衍生产品,仅 Philips 就有近 100 种。
现在几乎每个半导体制造商都生产嵌入式处理器,越来越多的公司有自己的处理器设计部门。
嵌入式处理器的寻址空间一般从 64kB 到 16MB ,处理速度为 0.1~2000MIPS ,常用封装 8~144 个引脚。
根据现状,嵌入式计算机可分成下面几类。
(1) 嵌入式微处理器 (Embedded Microprocessor Unit, EMPU) 嵌入式微处理器采用“增强型”通用微处理器。
由于嵌入式系统通常应用于环境比较恶劣的环境中,因而嵌入式微处理器在工作温度、电磁兼容性以及可靠性方面的要求较通用的标准微处理器高。
但是,嵌入式微处理器在功能方面与标准的微处理器基本上是一样的。
根据实际嵌入式应用要求,将嵌入式微处理器装配在专门设计的主板上,只保留和嵌入式应用有关的主板功能,这样可以大幅度减小系统的体积和功耗。
和工业控制计算机相比,嵌入式微处理器组成的系统具有体积小、重量轻、成本低、可靠性高的优点,但在其电路板上必须包括 ROM 、 RAM 、总线接口、各种外设等器件,从而降低了系统的可靠性,技术保密性也较差。
由嵌入式微处理器及其存储器、总线、外设等安装在一块电路主板上构成一个通常所说的单板机系统。
嵌入式处理器目前主要有 Am186/88 、 386EX 、 SC-400 、 Power PC 、 68000 、 MIPS 、 ARM 系列等。
(2) 嵌入式微控制器 (Microcontroller Unit, MCU) 嵌入式微控制器又称单片机,它将整个计算机系统集成到一块芯片中。
嵌入式微控制器一般以某种微处理器内核为核心,根据某些典型的应用,在芯片内部集成了 ROM/EPROM 、 RAM 、总线、总线逻辑、定时 / 计数器、看门狗、 I/O 、串行口、脉宽调制输出、 A/D 、 D/A 、 Flash RAM 、 EEPROM 等各种必要功能部件和外设。
为适应不同的应用需求,对功能的设置和外设的配置进行必要的修改和裁减定制,使得一个系列的单片机具有多种衍生产品,每种衍生产品的处理器内核都相同,不同的是存储器和外设的配置及功能的设置。
这样可以使单片机最大限度地和应用需求相匹配,从而减少整个系统的功耗和成本。
和嵌入式微处理器相比,微控制器的单片化使应用系统的体积大大减小,从而使功耗和成本大幅度下降、可靠性提高。
由于嵌入式微控制器目前在产品的品种和数量上是所有种类嵌入式处理器中最多的,而且上述诸多优点决定了微控制器是嵌入式系统应用的主流。
微控制器的片上外设资源一般比较丰富,适合于控制,因此称为微控制器。
通常,嵌入式微处理器可分为通用和半通用两类,比较有代表性的通用系列包括 8051 、 P51XA 、 MCS-251 、 MCS-96/196/296 、 C166/167 、 68300 等。
而比较有代表性的半通用系列,如支持 USB 接口的 MCU 8XC930/931 、 ...