如何设置SPI中的极性CPOL和相位CPHA
今天装修百科网给各位分享时钟相位和极性有什么作用的知识,其中也会对如何设置SPI中的极性CPOL和相位CPHA(spi cpol cpha)进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在我们开始吧!
如何设置SPI中的极性CPOL和相位CPHA
SPI有四种工作模式,各个工作模式的不同在于SCLK不同, 具体工作由CPOL,CPHA决定CPOL: (Clock Polarity),时钟极性当CPOL为0时,时钟空闲idle时候的电平是低电平;当CPOL为1时,时钟空闲idle时候的电平是高电平;CPHA:(Clock Phase),时钟相位当CPHA为0。
瞬时极性法中三极管的极性如何判断?
通信系统中的时钟信号到底有什么作用?
时钟信号就是给处理器提供执行标准的,比如信号每一次高电平或低电平的时候,CPU进行一次运算。
晶振就可以给CPU提供时钟。

主板诊断卡
CF 测试 CMOS R/W 功能性。
C0 早期的主板设定初始值: - 禁用 shadow RAM - 禁用 L2 cache(SURPER 7 构架及后期兼容构架) - 检测基本 chipset 寄存器。
C1 检测内存: -Auto- 检测DRAM(动态随机存取储存器)大小,类型 和 ECC。 -Auto- 检测L2 cache (SURPER 7 构架及后期兼容构架)
C3 映射BIOS编码到DRAM。
C5 允许chipset将BIOS复制到地址为E000& F000的shadow RAM。
01 将Xgroup编码定位在内存地址中的1000到0
03 初始化Superio(超级输入输出)_Early(响应)_Init(启动)开关。
05
3.将空白输出到荧屏。
4.清除CMOS错误。
07
1.清除 8042 接口。
2.初始化 8042接口自检。
08 1.检测特殊的键盘***型号为Winbond 977 系列超级I/O(输入/输出)芯片。
2.允许使用键盘接口。
0A 1.禁用PS/2 老鼠接口.(可选)
2.在端口和交换接口检测完成后自动检测键盘和鼠标端口。 (可选)
3.重置键盘在发现型号为Winbond 977 系列超级I/O输入/输出芯片后。 0E 检测内存地址为F000h段图像以证明是否它支持 R/ W.如果检测失败,机箱扬声器将发出警报。
10 自动检测FlashROM类型以读取合适的FlashROM R/W 编码。 在ESCD和DMI支持的情况下进入运行时间和区域的地址位F000。
12 使用步骤1’s 运算方式以确定CMOS电路的接口。 .同时设定电源即时状态频率, 然后检查是否超出范围。
14 将主板程序默认值导入主板。 主板默认值是OEM 客户的MODBINable 。
16 初始化 Early(响应)_ Init(启动)_ Onboard(板载)_ 晶振开关。
18 检测CPU 包括商标在内的信息, SMI类型 (Cyrix 或Intel) 和CPU处理器数据的水平。 (586 或 686)
1B 初始化中断无线引导平台。如果没有特殊的标记,所有H/W中断指向对SPURIOUS_ soft_ HDLR 的 SPURIOUS_ INT_ HDLR&S/W中断。
1D 初始化EARLY_ PM_ INIT 开关。
1F 装载键盘阵列。 (笔记本平台)
21 HPM设定初值 (笔记本平台)
23
1. 检查RTC值的有效性: e. g.a. 地址为5Ah的值 RTC是有错误的值。 2. 在BIOS中装载CMOS设定。 如果CMOS检测失败,使用默认值替代设定值。
3. 为 PCI& PnP的使用准备BIOS资源分布图。 如果 ESCD 是有效的,进入 ESCD's初始设定值数据中读取。
4. 初始化板载时钟频率发生器。 禁用没有使用的PCI& DIMM插槽。
5. 早期的PCI设定初始值: - 列举PCI总线序号。 - 分配内存&输入/输出资源。 - 寻找一个有效的视频图形适配器设备&视频图形适配器BIOS, 而且将它放入C000:0.
26
1.超频错误(可清空CMOS)
2.没有安装显卡或显卡损坏
3.显卡版本和显卡BIOS版本不匹配 27 初始化INT 09缓冲。
29
1. 分配CPU内部MTRR(P6&PII)为 0- 640内存地址。
2. 初始化 Pentium级CPU的APIC。
3. 按照早期主板设定COMS。 例子: 在主板上的IDE***。
4. 测试CPU速度。
5. 激活显示适配器BIOS。
2D
1. 初始化多语言支持。
2. 在屏幕上显示信息, 包括BIOS名称, CPU类型, 和CPU速度。
33 重新设定键盘除了采用 Winbond 977 系列超级输入/输出芯片以外。
3C 检测8254端口 3E 检测通道1以BIT为数据单位通过8259端口中断。 40 检测通道2以BIT为数据单位通过8259端口中断。 43 检测8259的功能性。
47 初始化EISA插槽
49
1. 以双字节64K数据包检测内存容量。
2. 为 AMD K5 处理器写入配置。
4E
1. 分配M1处理器的MTRR
2. 为P6级别的CPU初始化二级缓存&程序可使用的缓存范围。
3. 初始化P6级别CPU的APIC值。
4. 在MP平台之上, 在每个处理器之间允许以较小的范围调整缓存以防止冲突。
50 初始化通用串行总线(USB)
52 检测全部内存 ( 清除所有的扩展内存到0)
55 显示CPU序列号 (多处理器平台)
57
1. 显示PnP LOGO。
2. 初始化早期的ISA PnP。 - 分配CSN到每个ISA PnP设备。
59 初始化硬件**保护。
5B (可选特性)在使用软盘驱动器进入AWDFLASH.EXE时显示相关信息(可选)
5D
1. 初始化Init(启动)_ Onboard(板载)_ SuperI/O 开关。
2. 初始化Init_ Onbaord_ AUDIO音频开关。
60 全部完成后进入设置界面;i. e.直到PSOT自检完成用户才可以进入CMOS设置界面。
65 初始化PS/2接口鼠标。
67 为激活系统提供内存信息: INT 15h ax=E820h 69 打开 L2 cache(二级缓存)
6B 主板正按照系统安装的部件的描述信息进行设置及关联。
6D
1. 为ISA PnP 设备分配资源。
2. 在系统部件设置为“AUTO”时自动为COM口分配端口值。
6F
1. 初始化软盘***。
2. 加载软盘驱动器失败40: 硬件。(BIOS中设定软驱存在,但并没有安装硬件)
73 (可选特性)是否进入 AWDFLASH.EXE: - 当AwdFlash在软盘驱动器中被找到。 - 当Alt+F2被按下时。
75 检测&安装所有的IDE设备: HDD(硬盘), LS120 ,ZIP(这两个是特殊的驱动器,如USB闪存等),CDROM(光驱) 77 检测串口(COM口,SATA)和并口(打印机,IDE口)。
7A 检测&安装co-处理器
7F
1. 当支持全屏幕图像图形时,转换到文本模式。 - 如果错误发生,报告错误并等待键盘输入。 - 如果并未发生错误,或F1按键被按下时继续: 显示/隐藏开机画面或自行设定图形图像。
82
1. 启动主板的电源管理功能。
2. 恢复到能源之星的开机画面
3. 如果设定了开机密码,将要求出入开机密码。
83 将所有的设定保存到CMOS中。
84 初始化ISA PnP引导设备。
85
1. 通用串行总线的最后初始化。
2. 网络个人计算机: 建立SYSID结构。
3. 按下电源开关后回到本文模式。
4. 设置内存对ACPI(高级电源管理)的支持。
5. 唤醒ISA适配器ROMs 。
6. 分配PCI设备的IRQs(系统中断模式)。
7. 初始化APM 8. 清除IRQs冲突
88
1.CPU 故障
2.主板故障
93 读取硬盘引导信息是否包含**保护编码
94 1. 打开二级缓存
2. 系统引导启动速度。
3. 主板最后的初始化。
4. 电源管理的最后初始化。
5. 清除屏幕& 显示摘要。
6. 程序为K6级CPU写入配置。
7. 程序为P6级CPU写入关联。
95
1. 保存系统时间及日期。
2. 更新键盘引导指示灯&采样率。
96
1. 建立MP模块
2. 建立&更新 ESCD。
3. 将CMOS设定为 20h 或 19h
4. 将CMOS时间加载到DOS兼容状态下的时间条。
5. 建立MSIRQ数据库。
FF 检测完成,正常引导 (INT 19h)
本文对于所有支持DEBUG功能的主板和DEBUG卡适用,只要你有DEBUG卡或主板支持DEBUG功能都可以使用
SPI总线的通讯协议是什么?
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。
(1)SDO – 主设备数据输出,从设备数据输入
(2)SDI – 主设备数据输入,从设备数据输出
(3)SCLK – 时钟信号,由主设备产生
(4)CS – 从设备使能信号,由主设备控制
其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许在同一总线上连接多个SPI设备成为可能。
接下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。
要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线**,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。
在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从设备的系统中,每个从设备需要**的使能信号,硬件上比I2C系统要稍微复杂一些。
最后,SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。
AT91RM9200的SPI接口主要由4个引脚构成:SPICLK、MOSI、MISO及 /SS,其中SPICLK是整个SPI总线的公用时钟,MOSI、MISO作为主机,从机的输入输出的标志,MOSI是主机的输出,从机的输入,MISO 是主机的输入,从机的输出。/SS是从机的标志管脚,在互相通信的两个SPI总线的器件,/SS管脚的电平低的是从机,相反/SS管脚的电平高的是主机。在一个SPI通信系统中,必须有主机。SPI总线可以配置成单主单从,单主多从,互为主从。
SPI的片选可以扩充选择16个外设,这时PCS输出=NPCS,说NPCS0~3接4-16***,这个***是需要外接4-16***,***的输入为NPCS0~3,输出用于16个外设的选择。
二 SPI协议举例
SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。
假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。
那么第一个上升沿来的时候 数据将会是sdo=1;寄存器=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在 8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个spi时序。I2C总线 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接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
什么是时钟相位? 时钟信号不是一个矩形信号吗?那它的相位怎么表示啊,到底它的相位是什么啊
clk0、clk1:00 01 10 11 分别表示0度,90度,180度,360度
SPI,I2C,UART三种串行总线协议的区别和SPI接口介绍
区别:SPI:高速同步串行口。
3~4线接口,收发**、可同步进行 UART:通用异步串行口。
按照标准波特率完成双向通讯,速度慢 SPI:一种串行传输方式,三线制,网上可找到其通信协议和用法的 3根线实现数据双向传输 串行外围接口 Serial peripheral interface UART:通用异步收发器 UART是用于控制计算机与串行设备的芯片。
有一点要注意的是,它提供了RS-232C数据终 端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了 。
作为接口的一部分,UART还提供以下功能: 将由计算机内部传送过来的并行数据转换为输出的串行数据流。
将计算机外部来的串行 数据转换为字节,供计算机内部使用并行数据的器件使用。
在输出的串行数据流中加入 奇偶校验位,并对从外部接收的数据流进行奇偶校验。
在输出数据流中加入启停标记, 并从接收数据流中删除启停标记。
处理由键盘或鼠标发出的中断信号(键盘和鼠票也是 串行设备)。
可以处理计算机与外部串行设备的同步管理问题。
有一些比较高档的UART 还提供输入输出数据的缓冲区,现在比较新的UART是16550,它可以在计算机需要处理数 据前在其缓冲区内存储16字节数据,而通常的UART是8250。
现在如果购买一个内置的 调制解调器,此调制解调器内部通常就会有16550 UART。
I2C:能用于替代标准的并行总线,能连接的各种集成电路和功能模块。
I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。
总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或***工作。
多路微***能在同一个I2C总线上共存。
SPI总线的通讯协议是什么?
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。
(1)SDO – 主设备数据输出,从设备数据输入
(2)SDI – 主设备数据输入,从设备数据输出
(3)SCLK – 时钟信号,由主设备产生
(4)CS – 从设备使能信号,由主设备控制
其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许在同一总线上连接多个SPI设备成为可能。
接下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。
要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线**,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。
在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从设备的系统中,每个从设备需要**的使能信号,硬件上比I2C系统要稍微复杂一些。
最后,SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。
AT91RM9200的SPI接口主要由4个引脚构成:SPICLK、MOSI、MISO及 /SS,其中SPICLK是整个SPI总线的公用时钟,MOSI、MISO作为主机,从机的输入输出的标志,MOSI是主机的输出,从机的输入,MISO 是主机的输入,从机的输出。/SS是从机的标志管脚,在互相通信的两个SPI总线的器件,/SS管脚的电平低的是从机,相反/SS管脚的电平高的是主机。在一个SPI通信系统中,必须有主机。SPI总线可以配置成单主单从,单主多从,互为主从。
SPI的片选可以扩充选择16个外设,这时PCS输出=NPCS,说NPCS0~3接4-16***,这个***是需要外接4-16***,***的输入为NPCS0~3,输出用于16个外设的选择。
二 SPI协议举例
SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。
假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。
那么第一个上升沿来的时候 数据将会是sdo=1;寄存器=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在 8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个spi时序。I2C总线 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接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
SPI中的极性CPOL和相位CPHA是什么以及如何设置
典型的SPI***由如波特率发生器、主控逻辑、收发缓冲、控制部分等几大部分组成。
通常SPI通过4个管脚与外部器件相连:
MISO:主收从发管脚,仅由从设备控制;单向数据线;
MOSI:主发从收管理,仅由主设备控制;单向数据线;
SCK:串口时钟,由主设备控制,仅由主设备控制;用于时钟同步;
NSS(SEL):从设备选择管脚,对于主机,无用,可配置为GPIO口用于选择从机;仅由主设备控制;用于从机寻址;从机仅控制MISO管脚,发数据到主机。
串行通讯方式 spi和 i2c各有何优点(适合在何种场合使用),两单片机板上相连,采用何种方式好.
1,SPI总线就是三根。 片选CS一根,这个由各自芯片决定,有高平或者低平的。这个其实是必须的,因为只有片选到了才能找到。和我用的总线74HC573(或者74LS373)锁存器一个道理。如果片选成功,就上第二根线SCL,这个上面就是时钟,这个时钟完全可以模拟,当然时钟上面是有时序的,用程序延时把时序调整好,模拟就没问题。最后就是I/O口,如果是三线的SPI,那么这根线就是数据双向传输的,如果是四根的SPI,这个我现在还没用过,就是一方入一方出,不过我觉得完全没必要,一根线数据来去就挺好。由于是一根或者两根线,那么数据就靠串行来去。2,I2C总线就是两根。 就是一根SCL时钟,另一个根SDA传数据,就两根,没有了I2C的那个片选CS端。因此在这个上面传输数据,必须靠I2C这两根唯二的的线表示启动、传输和停止等。电平就只有高低了,那么还能利用什么呢,就是上升沿和下降沿,总之,在这么两个线上其实好好多组合。第一类,电平组合类SCL和SDA的配合四种:高平+高平、高平+低平、低平+高平、低平+低平;第二类,电平SCKL和边沿SDA组合类:高平+上升沿、高平+下降沿、地平+上升沿、低平+下降沿。可以看出就这么两根线上可以利用的东西也不少,用这些组合就可以表示起动、停止等等,甚至根本就用不了这么多。退一万步讲,即使全部都用了,还可以串行继续组合么,还可以先SDA再SCL么,总之两根线都能被挖掘这么深,我不得不佩服那些飞利浦工程师们的创造力。从上面就明白了,如何表示所选择的芯片的启动,就靠这些组合。例如:SCL上高平上SDA上的上升沿或者下降沿,证明主机发送了芯片的启动要求。还有一个问题就是,如果I2C上挂了多个I2C器件,那么怎么知道启动那一个呢,因为它们又没有SPI的片选CS那个管脚,这个管脚可以通过类似三八***那样找到类型相同但是不同的芯片,I2C上又没有怎么办呢?I2C的器件上有几个管脚接地或者挂高(AT24C02就是,叫可编程管脚)就是地址,还有就是器件厂商也规定了I2C上发送的第一个字节就是芯片地址,前四个位0000~11111,这个最多可以表示16个不同类型的I2C器件(实际I2C器件根本没有这么多,而且0000和1111不能用,所以只剩下14个了。这个国际统一的规定,就是I2C的协议,《全国大学生电子设计竞赛——单片机应用技能》P171有说明,“I2C总线委员会”的规定)。剩下的3个位就是器件的地址,这个地址和I2C上发的地址对上了,就找到了,剩下最后一位是读写。然后在I2C上的两根线上写数据,先写芯片地址,再写找到的芯片内部的地址,最后是读或者是写这个地址,而且每发送一个字节必须从机给个应答,也就是链接的I2C器件给主机(一般是单片机或者是I2C接口)发送回来一个应答,而且应答是必须是收一个字节接一个应答那么交替。因此从这点上看来,I2C协议实现起来其实挺复杂的,就为了少一根线,做了多种协议,还有就是程序比SPI变得复杂。更重要的一点是,I2C总线上所接的器件,一种I2C最多可以接8个(因为控制字前四位是种类,最后一位是读写,只有三位留给地址了),如果不同种类的I2C都算进去,总共I2C上接的器件就是14*8=112个,尽管已经很多了,但至少说明了I2C总线上能挂的器件是有限的。3、但是和SPI比较一下就会发现,尽管I2C复杂一点,器件有限,但是优点还是非常多的,因为三线SPI总线上只有SCK和I/O才是真正的总线,可以公用,但是CS片选信号可是一对一的,如果SPI总线上接112个SPI器件,SCK和I/O总线可以共用,但是112的CS片选如何处理,难道用CPLD扩展逻辑门门么,显然是不现实的。而且各个器件的CS片选有的是高有的是低,也是个麻烦。这点看来,SPI编程比I2C尽管简单,但是硬件麻烦,I2C软件复杂,但是硬件会简单。总体来说还是I2C有更多好处,因为软件总比硬件问题好处理。4、共同的问题,如果在一些简单的单片机例如AT89S51上模拟I2C或者SPI总线的时候,时序中高低电平长短和晶振有关,因此当换用不同的晶振或者单片机时候,要改变时序中控制高低电平的延时因子。
I2C具有以下优点:1. 硬件简单,资源消耗少。只有时钟和数据线。2. 时钟同步和仲裁的实现原理也很简单,以开漏/集电极开路门以线路逻辑简单实现。3. 协议设计精巧、易用、灵活。数据、地址、指令都可以传。4. 使用广泛,现在几乎所有的IC厂商都在芯片上集成了I2C。5. Philips 对I2C协议的IP已经过期,license上几乎不用考虑。