新闻中心

EEPW首页>嵌入式系统>设计应用> SPI、IIC、UART、can区别

SPI、IIC、UART、can区别

作者: 时间:2016-11-28 来源:网络 收藏


void wait_5ms( void ) {
int i ;
for ( i=0 ; i<1000 ; i++ )
{
;
}
}

//向24C04写入器件地址和一个指定的字节地址。
bit E_address(uchar page ,uchar Address )
{
I_start() ;
if ( I_send( WRITE +page) )
return ( I_send( Address ) ) ;
else
return ( FALSE ) ;
}


//参数的含义:从第几个模块(不超过3),模块中第几个字节(不超过255)
//写到RAM映象的第几个字节和读的长度
bit E_read_block(uchar page, uchar addr,uchar arraypoint,uchar longth)
{
uchar i ;

if ( E_address(page, addr ) ) {

I_start() ;
if ( I_send( READ+page ) ) {
for ( i=0; i<=longth ;i++ )
{
EAROMImage[arraypoint+i] =I_receive();
if ( i != longth ) I_Ack() ;
else {
I_clock() ;
I_stop() ;
}
}
return ( TRUE ) ;
}
else {
I_stop() ;
return ( FALSE ) ;
}
}
else
I_stop() ;
return ( FALSE ) ;
}

bit E_write_block(uchar page,uchar addr,uchar arraypoint,uchar longth) {
uchar i ;
for ( i=addr; i<=addr+longth ; i++ ) {
if ( E_address(page,i) && I_send( EAROMImage[arraypoint+i-addr] ) ) {
I_stop() ;
wait_5ms();
}
else
return ( FALSE ) ;
}
return ( TRUE ) ;
}

//test
voidmain() {
EAROMImage[39]=0xfe;
SCON = 0x5a;
TMOD = 0x20;
TCON = 0x69;
TH1 =0xfd;
I_init();//I2C 总线初始化
P1=0xFF;

if (E_write_block(0,8,39,1))
P1=0xFE;//p10
else
{}

if (E_read_block(0,8,55,1))
{}
else
P1=P1&0xFD;

if(EAROMImage[55]==0xfe)
P1=P1&0x0FB;
while(1);

}
posted @ 2009-02-22 22:41 陈广强 阅读(116) | 评论(0) | 编辑
关于IIC总线

I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。
1 I2C总线特点
I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。I2C总线的另一个优点是,它支持多主控(multimastering), 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
2 I2C总线工作原理
2.1 总线的构成及信号类型
I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。
I2C总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
目前有很多半导体集成电路上都集成了I2C接口。带有I2C接口的单片机有:CYGNAL的 C8051F0XX系列,PHILIPSP87LPC7XX系列,MICROCHIP的PIC16C6XX系列等。很多外围器件如存储器、监控芯片等也提供I2C接口。

本文引用地址: //m.amcfsurvey.com/article/201611/322756.htm

I2C总线的时钟信号

在I2C总线上传送信息时的时钟同步信号是由挂接在SCL时钟线上的所有器件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号变为低电平,将使SCL线上所有器件开始并保护低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并不影响SCL线的状态,这些器件将进入高电平等待的状态。

当所有器件的时钟信号都变为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉成低电平。这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件决定,而时钟高电平时间由时钟高电平期最短的器件决定。

I2C总线的传输协议与数据传送

起始和停止条件

在数据传送过程中,必须确认数据传送的开始和结束。在I2C总线技术规范中,开始和结束信号(也称启动和停止信号)的定义如图3所示。

开始信号:当时钟总线SCL为高电平时,数据线SDA由高电平向低电平跳变,开始传送数据。

结束信号:当SCL线为高电平时,SDA线从低电平向高电平跳变,结束传送数据。

开始和结束信号都是由主器件产生。在开始信号以后,总线即被认为处于忙状态,其它器件不能再产生开始信号。主器件在结束信号以后退出主器件角色,经过一段时间过,总线被认为是空闲的。

图3超始和停止信号图

数据格式

I2C总线数据传送采用时钟脉冲逐位串行传送方式,在SCL的低电平期间,SDA线上高、低电平能变化,在高电平期间,SDA上数据必须保护稳定,以便接收器采样接收,时序如图4所示。

图4 数据传送时序图

I2C总线发送器送到SDA线上的每个字节必须为8位长,传送时高位在前,低位在后。与之对应,主器件在SCL线上产生8个脉冲;第9个脉冲低电平期间,发送器释放SDA线,接收器把SDA线拉低,以给出一个接收确认位;第9个脉冲高电平期间,发送器收到这个确认位然后开始下一字节的传送,下一个字节的第一个脉冲低电平期间接收器释放SDA。每个字节需要9个脉冲,每次传送的字节数是不受限制的。

I2C总线的数据传送格式是在I2C总线开始信号后,送出的第一字节数据是用来选择从器件地址的,其中前7位为地址码,第8位为方向位(R/W)。方向位为“0”表示发送,即主器件把信息写到所选择的从器件中;方向位为“1”表示主器件将从从器件读信息。格式如下:

1

0

1

0

A2

A1

A0

R/W

注:前四位固定为1010。

开始信号后,系统中的各个器件将自己的地址和主器件送到总线上的地址进行比较,如果与主器件发送到总线上的地址一致,则该器件即被主器件寻址的器件,其接收信息还是发送信息则由第8位(R/W)决定。发送完第一个字节后再开始发数据信号。


上一页 1 2 3 4 下一页

关键词:SPIIICUARTca

评论


相关推荐

技术专区

关闭