IIC、SPI和UART区别
第一個區(qū)別當(dāng)然是名字:
?????SPI(Serial Peripheral Interface:串行外設(shè)接口);
?????I2C(INTER IC BUS)
?????UART(Universal Asynchronous Receiver Transmitter:通用異步收發(fā)器)
第二,區(qū)別在電氣信號線上:
?????SPI總線由三條信號線組成:串行時鐘(SCLK)、串行數(shù)據(jù)輸出(SDO)、串行數(shù)據(jù)輸入(SDI)。SPI總線可以實現(xiàn)多個SPI設(shè)備互相連接。提供SPI串行時鐘的SPI設(shè)備為SPI主機或主設(shè)備(Master),其他設(shè)備為SPI從機或從設(shè)備(Slave)。主從設(shè)備間可以實現(xiàn)全雙工通信,當(dāng)有多個從設(shè)備時,還可以增加一條從設(shè)備選擇線。
?????如果用通用IO口模擬SPI總線,必須要有一個輸出口(SDO),一個輸入口(SDI),另一個口則視實現(xiàn)的設(shè)備類型而定,如果要實現(xiàn)主從設(shè)備,則需輸入輸出口,若只實現(xiàn)主設(shè)備,則需輸出口即可,若只實現(xiàn)從設(shè)備,則只需輸入口即可。
?????I2C總線是雙向、兩線(SCL、SDA)、串行、多主控(multi-master)接口標(biāo)準(zhǔn),具有總線仲裁機制,非常適合在器件之間進行近距離、非經(jīng)常性的數(shù)據(jù)通信。在它的協(xié)議體系中,傳輸數(shù)據(jù)時都會帶上目的設(shè)備的設(shè)備地址,因此可以實現(xiàn)設(shè)備組網(wǎng)。
?????如果用通用IO口模擬I2C總線,并實現(xiàn)雙向傳輸,則需一個輸入輸出口(SDA),另外還需一個輸出口(SCL)。(注:I2C資料了解得比較少,這里的描述可能很不完備)
?????UART總線是異步串口,因此一般比前兩種同步串口的結(jié)構(gòu)要復(fù)雜很多,一般由波特率產(chǎn)生器(產(chǎn)生的波特率等于傳輸波特率的16倍)、UART接收器、UART發(fā)送器組成,硬件上由兩根線,一根用于發(fā)送,一根用于接收。
?????顯然,如果用通用IO口模擬UART總線,則需一個輸入口,一個輸出口。
第三,從第二點明顯可以看出,SPI和UART可以實現(xiàn)全雙工,但I2C不行;
第四,看看牛人們的意見吧!
?????wudanyu:I2C線更少,我覺得比UART、SPI更為強大,但是技術(shù)上也更加麻煩些,因為I2C需要有雙向IO的支持,而且使用上拉電阻,我覺得抗干擾能力較弱,一般用于同一板卡上芯片之間的通信,較少用于遠(yuǎn)距離通信。SPI實現(xiàn)要簡單一些,UART需要固定的波特率,就是說兩位數(shù)據(jù)的間隔要相等,而SPI則無所謂,因為它是有時鐘的協(xié)議。
?????quickmouse:I2C的速度比SPI慢一點,協(xié)議比SPI復(fù)雜一點,但是連線也比標(biāo)準(zhǔn)的SPI要少。
?
SPI總線
SPI總線簡介
同步外設(shè)接口(SPI)是由摩托羅拉公司開發(fā)的全雙工同步串行總線,該總線大量用在與EEPROM、ADC、FRAM和顯示驅(qū)動器之類的慢速外設(shè)器件通信。
SPI(Serial Peripheral Interface)是一種串行同步通訊協(xié)議,由一個主設(shè)備和一個或多個從設(shè)備組成,主設(shè)備啟動一個與從設(shè)備的同步通訊,從而完成數(shù)據(jù)的交換。SPI 接口由SDI(串行數(shù)據(jù)輸入),SDO(串行數(shù)據(jù)輸出),SCK(串行移位時鐘),CS(從使能信號)四種信號構(gòu)成,CS 決定了唯一的與主設(shè)備通信的從設(shè)備,如沒有CS 信號,則只能存在一個從設(shè)備,主設(shè)備通過產(chǎn)生移位時鐘來發(fā)起通訊。通訊時,數(shù)據(jù)由SDO 輸出,SDI 輸入,數(shù)據(jù)在時鐘的上升或下降沿由SDO 輸出,在緊接著的下降或上升沿由SDI 讀入,這樣經(jīng)過8/16 次時鐘的改變,完成8/16 位數(shù)據(jù)的傳輸。
SPI通信
該總線通信基于主-從配置。它有以下4個信號:
MOSI:主出/從入
MISO:主入/從出
SCK:串行時鐘
SS:從屬選擇
芯片上“從屬選擇”(slave-select)的引腳數(shù)決定了可連到總線上的器件數(shù)量。
????????在SPI傳輸中,數(shù)據(jù)是同步進行發(fā)送和接收的。數(shù)據(jù)傳輸?shù)臅r鐘基于來自主處理器的時鐘脈沖,摩托羅拉沒有定義任何通用SPI的時鐘規(guī)范。然而,最常用的時鐘設(shè)置基于時鐘極性(CPOL)和時鐘相位(CPHA)兩個參數(shù),CPOL定義SPI串行時鐘的活動狀態(tài),而CPHA定義相對于SO-數(shù)據(jù)位的時鐘相位。CPOL和CPHA的設(shè)置決定了數(shù)據(jù)取樣的時鐘沿。
數(shù)據(jù)方向和通信速度
????????SPI傳輸串行數(shù)據(jù)時首先傳輸最高位。波特率可以高達(dá)5Mbps,具體速度大小取決于SPI硬件。例如,Xicor公司的SPI串行器件傳輸速度能達(dá)到5MHz。
SPI總線接口及時序
SPI總線包括1根串行同步時鐘信號線以及2根數(shù)據(jù)線。
SPI模塊為了和外設(shè)進行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出串行同步時鐘極性和相位可以進行配置,時鐘極性(CPOL)對傳輸協(xié)議沒有重大的影響。如果CPOL=0,串行同步時鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時鐘的空閑狀態(tài)為高電平。時鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)備時鐘相位和極性應(yīng)該一致。SPI主模塊和與之通信的外設(shè)備時鐘相位和極性應(yīng)該一致。個人理解這句話有2層意思:其一,主設(shè)備SPI時鐘和極性的配置應(yīng)該由外設(shè)來決定;其二,二者的配置應(yīng)該保持一致,即主設(shè)備的SDO同從設(shè)備的SDO配置一致,主設(shè)備的SDI同從設(shè)備的SDI配置一致。因為主從設(shè)備是在SCLK的控制下,同時發(fā)送和接收數(shù)據(jù),并通過2個雙向移位寄存器來交換數(shù)據(jù)。SPI接口時序如圖3、圖4所示。
SPI是一個環(huán)形總線結(jié)構(gòu),由ss(cs)、sck、sdi、sdo構(gòu)成,其時序其實很簡單,主要是在sck的控制下,兩個雙向移位寄存器進行數(shù)據(jù)交換。
??????假設(shè)下面的8位寄存器裝的是待發(fā)送的數(shù)據(jù)10101010,上升沿發(fā)送、下降沿接收、高位先發(fā)送。
??????那么第一個上升沿來的時候數(shù)據(jù)將會是sdo=1;寄存器=0101010x。下降沿到來的時候,sdi上的電平將所存到寄存器中去,那么這時寄存器=0101010sdi,這樣在8個時鐘脈沖以后,兩個寄存器的內(nèi)容互相交換一次。這樣就完成里一個spi時序。
??????例子:
??????假設(shè)主機和從機初始化就緒:并且主機的sbuff=0xaa,從機的sbuff=0x55,下面將分步對spi的8個時鐘周期的數(shù)據(jù)情況演示一遍:假設(shè)上升沿發(fā)送數(shù)據(jù)
脈沖 主機sbuff 從機sbuff sdi sdo?
0 10101010 01010101 0 0
1上 0101010x 1010101x 0 1
1下 01010100 10101011 0 1
2上 1010100x 0101011x 1 0
2下 10101001 01010110 1 0
3上 0101001x 1010110x 0 1
3下 01010010 10101101 0 1
4上 1010010x 0101101x 1 0
4下 10100101 01011010 1 0
5上 0100101x 1011010x 0 1
5下 01001010 10110101 0 1
6上 1001010x 0110101x 1 0
6下 10010101 01101010 1 0
7上 0010101x 1101010x 0 1
7下 00101010 11010101 0 1
8上 0101010x 1010101x 1 0
8下 01010101 10101010 1 0
這樣就完成了兩個寄存器8位的交換,上面的上表示上升沿、下表示下降沿,sdi、sdo相對于主機而言的。其中ss引腳作為主機的時候,從機可以把它拉底被動選為從機,作為從機的是時候,可以作為片選腳用。根據(jù)以上分析,一個完整的傳送周期是16位,即兩個字節(jié),因為,首先主機要發(fā)送命令過去,然后從機根據(jù)主機的名準(zhǔn)備數(shù)據(jù),主機在下一個8位時鐘周期才把數(shù)據(jù)讀回來
SPI 總線是Motorola公司推出的三線同步接口,同步串行3線方式進行通信:一條時鐘線SCK,一條數(shù)據(jù)輸入線MOSI,一條數(shù)據(jù)輸出線MISO;用于CPU與各種外圍器件進行全雙工、同步串行通訊。SPI主要特點有:可以同時發(fā)出和接收串行數(shù)據(jù);可以當(dāng)作主機或從機工作;提供頻率可編程時鐘;發(fā)送結(jié)束中斷標(biāo)志;寫沖突保護;總線競爭保護等。圖3示出SPI總線工作的四種方式,其中使用的最為廣泛的是SPI0和SPI3方式(實線表示):
圖2???SPI總線四種工作方式
SPI模塊為了和外設(shè)進行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出串行同步時鐘極性和相位可以進行配置,時鐘極性(CPOL)對傳輸協(xié)議沒有重大的影響。如果CPOL=0,串行同步時鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時鐘的空閑狀態(tài)為高電平。時鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)音時鐘相位和極性應(yīng)該一致。SPI接口時序如圖3、圖4所示。
二,.SPI功能模塊的設(shè)計
根據(jù)功能定義及SPI的工作原理,將整個IP Core分為8個子模塊:uC接口模塊、時鐘分頻模塊、發(fā)送數(shù)據(jù)FIFO模塊、接收數(shù)據(jù)FIFO模塊、狀態(tài)機模塊、發(fā)送數(shù)據(jù)邏輯模塊、接收數(shù)據(jù)邏輯模塊以及中斷形式模塊。
深入分析SPI的四種傳輸協(xié)議可以發(fā)現(xiàn),根據(jù)一種協(xié)議,只要對串行同步時鐘進行轉(zhuǎn)換,就能得到其余的三種協(xié)議。為了簡化設(shè)計規(guī)定,如果要連續(xù)傳輸多個數(shù)據(jù),在兩個數(shù)據(jù)傳輸之間插入一個串行時鐘的空閑等待,這樣狀態(tài)機只需兩種狀態(tài)(空閑和工作)就能正確工作。
SPI協(xié)議心得
SPI接口時鐘配置心得:
在主設(shè)備這邊配置SPI接口時鐘的時候一定要弄清楚從設(shè)備的時鐘要求,因為主設(shè)備這邊的時鐘極性和相位都是以從設(shè)備為基準(zhǔn)的。因此在時鐘極性的配置上一定要搞清楚從設(shè)備是在時鐘的上升沿還是下降沿接收數(shù)據(jù),是在時鐘的下降沿還是上升沿輸出數(shù)據(jù)。但要注意的是,由于主設(shè)備的SDO連接從設(shè)備的SDI,從設(shè)備的SDO連接主設(shè)備的SDI,從設(shè)備SDI接收的數(shù)據(jù)是主設(shè)備的SDO發(fā)送過來的,主設(shè)備SDI接收的數(shù)據(jù)是從設(shè)備SDO發(fā)送過來的,所以主設(shè)備這邊SPI時鐘極性的配置(即SDO的配置)跟從設(shè)備的SDI接收數(shù)據(jù)的極性是相反的,跟從設(shè)備SDO發(fā)送數(shù)據(jù)的極性是相同的。下面這段話是Sychip Wlan8100 Module Spec上說的,充分說明了時鐘極性是如何配置的:
The 81xx module will always input data bits at the rising edge of the clock, and the host will always output data bits on the falling edge of the clock.
意思是:主設(shè)備在時鐘的下降沿發(fā)送數(shù)據(jù),從設(shè)備在時鐘的上升沿接收數(shù)據(jù)。因此主設(shè)備這邊SPI時鐘極性應(yīng)該配置為下降沿有效。
又如,下面這段話是摘自LCD Driver IC SSD1289:
SDI is shifted into 8-bit shift register on every rising edge of SCK in the order of data bit 7, data bit 6 …… data bit 0.
意思是:從設(shè)備SSD1289在時鐘的上升沿接收數(shù)據(jù),而且是按照從高位到地位的順序接收數(shù)據(jù)的。因此主設(shè)備的SPI時鐘極性同樣應(yīng)該配置為下降沿有效。
時鐘極性和相位配置正確后,數(shù)據(jù)才能夠被準(zhǔn)確的發(fā)送和接收。因此應(yīng)該對照從設(shè)備的SPI接口時序或者Spec文檔說明來正確配置主設(shè)備的時鐘。
?
IIC一例子
IIC
型號?????容量??????器件/業(yè)面尋址字節(jié)???????????????????可尋址位???????模塊
24C01???128B??????(1010)(A2)(A1)(A0)(0或1)?????3????????????128B
24C02???256B??????(1010)(A2)(A1)(A0)(0或1)?????3????????????256B
24C04???512B??????(1010)(A2)(A1)(P0)(0或1)?????2????????????2X256B
24C08??1024B??????(1010)(A2)(P1)(P0)(0或1)?????1????????????4X256B
24C16??2048B??????(1010)(P2)(P1)(P0)(0或1)?????0????????????8X256B
解析:IIC總線接口器件24C系列非易失性存儲器與89C51接口采用軟件模擬IIC。24C系列
存儲器器件地址統(tǒng)一為1010XXXX,不要問為什么,這是廠家出廠的時候規(guī)定好的了。至
于24C的引腳功能和89C51的接口我就不多說了,本文的重點主要是如何應(yīng)用。
??上面說了,器件的地址字節(jié)的高位是1010,那么低4位呢?先說最后一位吧,最后一
位為0的時候表示89C51要寫數(shù)據(jù)入存儲器,1的時候表示要從存儲器讀數(shù)據(jù)。還剩下中
三位A2,A1和A0。它們的高低電平取決于24C的A2,A1,A0是接高電平還是接地。A2,
A1 和A0有8個組合,因此可以擴展8個相同的器件,根據(jù)A2、A1、A0的不同,一樣的器件
也會有不同的地址。那么是不是每一個24C都可以擴展8個呢?不是的。注意上表,24C01
有三個可尋址位,A2,A1,A0,所以可以擴展8個,24C02也一樣。而04則只可以擴展4個
08只可以擴展2個,16就沒有擴展了,只可以掛一片24C16。為什么呢?因為訪問24C系列
除了訪問器件地址外,還要訪問器件內(nèi)的字節(jié)的地址。例如24C01,要對其操作,就先選
選中它的地址,然后操作第一個字節(jié)或其他字節(jié),這些字節(jié)也是有地址的,分模塊,用
一個字節(jié)表示,最多可以操作256個字節(jié)。24C01和24C02不大于256個字節(jié),對其操作就
簡單得多了。但24C04,08和16呢?他們都大于256個字節(jié),怎么辦?分模塊。注意到上
表的P0,P1,P3沒有?把04分成兩個模塊,2X256B,08四個模塊,16就八個模塊。究竟
怎么
模塊操作呢?拿24C08為例,有A2 P1 P0。A2只可以0或1,所以只能擴展2個24C08,其
內(nèi)有4個256字節(jié)的模塊,要操作哪個模塊取決于P1,P0的組合。例如,24C08的地址字節(jié)
為1010000X第一個字節(jié)地址為0,第256個地址為255,如果地址字節(jié)是1010001X,那么第
256個字節(jié)的地址為0,第512個字節(jié)的地址為255。就如此。
????再用24C08舉例說明如何擴展,當(dāng)兩個24C08的A2腳分別接高電平和地的時候,就可
以了,這樣就擴展了,他們的器件地址分別是1010000X和1010100X。當(dāng)要讀第一個(A2
接地)
???24C08的的第一個模塊的數(shù)據(jù)時候,單片機先發(fā)送地址字節(jié)10100001;當(dāng)要把數(shù)據(jù)寫
進第二個(A2接高電平)24C08的第二個模塊的時候,應(yīng)發(fā)送10101010地址字節(jié)。
????
代碼:
#include <reg51.h>
#define WRITE 0xA0???????????????????????
#define READ??0xA1???????????????????????
#define BLOCK_SIZE????100?????????????????
#define uchar unsigned char
#define HIGH 1
#define LOW 0
#define FALSE 0
#define TRUE ~FALSE
sbit SCL????????????????=P3^4;??//T0???????
sbit SDA????????????????=P3^5;??//T1???????
uchar xdata EAROMImage[BLOCK_SIZE]={0};
void delayi2c( void ) {
????????;
}
void I_start( void ) {
????????SCL = HIGH ;
????????delayi2c() ;
????????SDA = LOW ;
????????delayi2c() ;
????????SCL = LOW ;
????????delayi2c() ;
}
void I_stop( void ) {
????????SDA = LOW ;
????????delayi2c() ;
????????SCL = HIGH ;
????????delayi2c() ;
????????SDA = HIGH ;
????????delayi2c() ;
????????SCL = LOW ;
????????delayi2c() ;
}
//初始化
void I_init( void ) {
????????SCL = LOW ;
????????I_stop() ;
}
bit I_clock( void ) {
????????bit sample ;
????????SCL = HIGH ;
????????delayi2c() ;
????????sample = SDA ;
????????SCL = LOW ;
????????delayi2c() ;
????????return ( sample ) ;
}
//發(fā)送8位數(shù)據(jù)
bit I_send( uchar I_data ) {
????????uchar i ;
???????
????????for ( i=0 ; i<8 ; i++ ) {
????????????????SDA = (bit)( I_data & 0x80 ) ;
????????????????I_data = I_data << 1 ;
????????????????I_clock() ;
????????}
???????
????????SDA = HIGH ;
????????return ( ~I_clock() );
??}
//接受8位數(shù)據(jù)
uchar I_receive( void ) {
????????uchar I_data = 0 ;
????????register uchar i ;
????????for ( i=0 ; i<8 ; i++ ) {
????????????????I_data *= 2 ;
????????????????if (I_clock()) I_data++ ;
????????}
????????return ( I_data ) ;
}
//應(yīng)答
void I_Ack( void ) {
????????SDA = LOW;
????????I_clock();
????????SDA = HIGH;
}
?
void wait_5ms( void ) {
????????int i ;
????????for ( i=0 ; i<1000 ; i++ )
????{
????????????????;
????????}
}
//向24C04寫入器件地址和一個指定的字節(jié)地址。
bit E_address(uchar page ,uchar Address )
???{
????????I_start() ;
????????if ( I_send( WRITE +page) )
????????????????return ( I_send( Address ) ) ;
????????else
????????????????return ( FALSE ) ;
???}
//參數(shù)的含義:從第幾個模塊(不超過3),模塊中第幾個字節(jié)(不超過255)
//????????????寫到RAM映象的第幾個字節(jié)和讀的長度
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
void??main() {
????????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);
}
關(guān)于IIC總線
I2C(Inter-Integrated Circuit)總線是一種由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。I2C總線產(chǎn)生于在80年代,最初為音頻和視頻設(shè)備開發(fā),如今主要在服務(wù)器管理中使用,其中包括單個組件狀態(tài)的通信。例如管理員可對各個組件進行查詢,以管理系統(tǒng)的配置或掌握組件的功能狀態(tài),如電源和系統(tǒng)風(fēng)扇。可隨時監(jiān)控內(nèi)存、硬盤、網(wǎng)絡(luò)、系統(tǒng)溫度等多個參數(shù),增加了系統(tǒng)的安全性,方便了管理。
1 I2C總線特點
I2C總線最主要的優(yōu)點是其簡單性和有效性。由于接口直接在組件之上,因此I2C總線占用的空間非常小,減少了電路板的空間和芯片管腳的數(shù)量,降低了互聯(lián)成本。總線的長度可高達(dá)25英尺,并且能夠以10Kbps的最大傳輸速率支持40個組件。I2C總線的另一個優(yōu)點是,它支持多主控(multimastering),其中任何能夠進行發(fā)送和接收的設(shè)備都可以成為主總線。一個主控能夠控制信號的傳輸和時鐘頻率。當(dāng)然,在任何時間點上只能有一個主控。
2 I2C總線工作原理
2.1 總線的構(gòu)成及信號類型
I2C總線是由數(shù)據(jù)線SDA和時鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在CPU與被控IC之間、IC與IC之間進行雙向傳送,最高傳送速率100kbps。各種被控制電路均并聯(lián)在這條總線上,但就像電話機一樣只有撥通各自的號碼才能工作,所以每個電路和模塊都有唯一的地址,在信息的傳輸過程中,I2C總線上并接的每一模塊電路既是主控器(或被控器),又是發(fā)送器(或接收器),這取決于它所要完成的功能。CPU發(fā)出的控制信號分為地址碼和控制量兩部分,地址碼用來選址,即接通需要控制的電路,確定控制的種類;控制量決定該調(diào)整的類別(如對比度、亮度等)及需要調(diào)整的量。這樣,各控制電路雖然掛在同一條總線上,卻彼此獨立,互不相關(guān)。
I2C總線在傳送數(shù)據(jù)過程中共有三種類型信號, 它們分別是:開始信號、結(jié)束信號和應(yīng)答信號。
開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。
結(jié)束信號:SCL為低電平時,SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。
應(yīng)答信號:接收數(shù)據(jù)的IC在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個信號后,等待受控單元發(fā)出一個應(yīng)答信號,CPU接收到應(yīng)答信號后,根據(jù)實際情況作出是否繼續(xù)傳遞信號的判斷。若未收到應(yīng)答信號,由判斷為受控單元出現(xiàn)故障。
目前有很多半導(dǎo)體集成電路上都集成了I2C接口。帶有I2C接口的單片機有:CYGNAL的 C8051F0XX系列,PHILIPSP87LPC7XX系列,MICROCHIP的PIC16C6XX系列等。很多外圍器件如存儲器、監(jiān)控芯片等也提供I2C接口。
I2C總線的時鐘信號
????在I2C總線上傳送信息時的時鐘同步信號是由掛接在SCL時鐘線上的所有器件的邏輯“與”完成的。SCL線上由高電平到低電平的跳變將影響到這些器件,一旦某個器件的時鐘信號變?yōu)榈碗娖?#xff0c;將使SCL線上所有器件開始并保護低電平期。此時,低電平周期短的器件的時鐘由低至高的跳變并不影響SCL線的狀態(tài),這些器件將進入高電平等待的狀態(tài)。
????當(dāng)所有器件的時鐘信號都變?yōu)楦唠娖綍r,低電平期結(jié)束,SCL線被釋放返回高電平,即所有的器件都同時開始它們的高電平期。其后,第一個結(jié)束高電平期的器件又將SCL線拉成低電平。這樣就在SCL線上產(chǎn)生一個同步時鐘。可見,時鐘低電平時間由時鐘低電平期最長的器件決定,而時鐘高電平時間由時鐘高電平期最短的器件決定。
I2C總線的傳輸協(xié)議與數(shù)據(jù)傳送
起始和停止條件
在數(shù)據(jù)傳送過程中,必須確認(rèn)數(shù)據(jù)傳送的開始和結(jié)束。在I2C總線技術(shù)規(guī)范中,開始和結(jié)束信號(也稱啟動和停止信號)的定義如圖3所示。
開始信號:當(dāng)時鐘總線SCL為高電平時,數(shù)據(jù)線SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。
結(jié)束信號:當(dāng)SCL線為高電平時,SDA線從低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。
開始和結(jié)束信號都是由主器件產(chǎn)生。在開始信號以后,總線即被認(rèn)為處于忙狀態(tài),其它器件不能再產(chǎn)生開始信號。主器件在結(jié)束信號以后退出主器件角色,經(jīng)過一段時間過,總線被認(rèn)為是空閑的。
?
圖3超始和停止信號圖
?
數(shù)據(jù)格式
????I2C總線數(shù)據(jù)傳送采用時鐘脈沖逐位串行傳送方式,在SCL的低電平期間,SDA線上高、低電平能變化,在高電平期間,SDA上數(shù)據(jù)必須保護穩(wěn)定,以便接收器采樣接收,時序如圖4所示。
?
圖4 數(shù)據(jù)傳送時序圖
????I2C總線發(fā)送器送到SDA線上的每個字節(jié)必須為8位長,傳送時高位在前,低位在后。與之對應(yīng),主器件在SCL線上產(chǎn)生8個脈沖;第9個脈沖低電平期間,發(fā)送器釋放SDA線,接收器把SDA線拉低,以給出一個接收確認(rèn)位;第9個脈沖高電平期間,發(fā)送器收到這個確認(rèn)位然后開始下一字節(jié)的傳送,下一個字節(jié)的第一個脈沖低電平期間接收器釋放SDA。每個字節(jié)需要9個脈沖,每次傳送的字節(jié)數(shù)是不受限制的。
????I2C總線的數(shù)據(jù)傳送格式是在I2C總線開始信號后,送出的第一字節(jié)數(shù)據(jù)是用來選擇從器件地址的,其中前7位為地址碼,第8位為方向位(R/W)。方向位為“0”表示發(fā)送,即主器件把信息寫到所選擇的從器件中;方向位為“1”表示主器件將從從器件讀信息。格式如下:
1??0??1??0??A2???A1???A0??R/W
注:前四位固定為1010。
????開始信號后,系統(tǒng)中的各個器件將自己的地址和主器件送到總線上的地址進行比較,如果與主器件發(fā)送到總線上的地址一致,則該器件即被主器件尋址的器件,其接收信息還是發(fā)送信息則由第8位(R/W)決定。發(fā)送完第一個字節(jié)后再開始發(fā)數(shù)據(jù)信號。
響應(yīng)
????數(shù)據(jù)傳輸必須帶響應(yīng)。相關(guān)的響應(yīng)時鐘脈沖由主機產(chǎn)生,當(dāng)主器件發(fā)送完一字節(jié)的數(shù)據(jù)后,接著發(fā)出對應(yīng)于SCL線上的一個時鐘(ACK)認(rèn)可位,此時鐘內(nèi)主器件釋放SDA線,一字節(jié)傳送結(jié)束,而從器件的響應(yīng)信號將SDA線拉成低電平,使SDA在該時鐘的高電平期間為穩(wěn)定的低電平。從器件的響應(yīng)信號結(jié)束后,SDA線返回高電平,進入下一個傳送周期。
????通常被尋址的接收器在接收到的每個字節(jié)后必須產(chǎn)生一個響應(yīng)。當(dāng)從機不能響應(yīng)從機地址時,從機必須使數(shù)據(jù)線保持高電平,主機然后產(chǎn)生一個停止條件終止傳輸或者產(chǎn)生重復(fù)起始條件開始新的傳輸。如果從機接收器響應(yīng)了從機地址但是在傳輸了一段時間后不能接收更多數(shù)據(jù)字節(jié),主機必須再一次終止傳輸。這個情況用從機在第一個字節(jié)后沒有產(chǎn)生響應(yīng)來表示。從機使數(shù)據(jù)線保持高電平主機產(chǎn)生一個停止或重復(fù)起始條件。完整的數(shù)據(jù)傳送過程如圖5所示。
?
圖5 完整的數(shù)據(jù)傳送過程
?
????I2C總線還具有廣播呼叫地址用于尋址總線上所有器件的功能。若一個器件不需要廣播呼叫尋址中所提供的任何數(shù)據(jù),則可以忽咯該地址不作響應(yīng)。如果該器件需要廣播呼叫尋址中按需提供的數(shù)據(jù),則應(yīng)對地址作出響應(yīng),其表現(xiàn)為一個接收器。
3 總線基本操作
I2C規(guī)程運用主/從雙向通訊。器件發(fā)送數(shù)據(jù)到總線上,則定義為發(fā)送器,器件接收數(shù)據(jù)則定義為接收器。主器件和從器件都可以工作于接收和發(fā)送狀態(tài)。總線必須由主器件(通常為微控制器)控制,主器件產(chǎn)生串行時鐘(SCL)控制總線的傳輸方向,并產(chǎn)生起始和停止條件。SDA線上的數(shù)據(jù)狀態(tài)僅在SCL為低電平的期間才能改變,SCL為高電平的期間,SDA狀態(tài)的改變被用來表示起始和停止條件。參見圖1。
?
圖1 串行總線上的數(shù)據(jù)傳送順序
3.1 控制字節(jié)
在起始條件之后,必須是器件的控制字節(jié),其中高四位為器件類型識別符(不同的芯片類型有不同的定義,EEPROM一般應(yīng)為1010),接著三位為片選,最后一位為讀寫位,當(dāng)為1時為讀操作,為0時為寫操作。如圖2所示。
?
圖2 控制字節(jié)配置
?
3.2 寫操作寫操作分為字節(jié)寫和頁面寫兩種操作,對于頁面寫根據(jù)芯片的一次裝載的字節(jié)不同有所不同。關(guān)于頁面寫的地址、應(yīng)答和數(shù)據(jù)傳送的時序參見圖3。
?
圖3 頁面寫
?
3.3 讀操作讀操作有三種基本操作:當(dāng)前地址讀、隨機讀和順序讀。圖4給出的是順序讀的時序圖。應(yīng)當(dāng)注意的是:最后一個讀操作的第9個時鐘周期不是“不關(guān)心”。為了結(jié)束讀操作,主機必須在第9個周期間發(fā)出停止條件或者在第9個時鐘周期內(nèi)保持SDA為高電平、然后發(fā)出停止條件。
?
圖4 順序讀
?
4 實例:X24C04與MCS-51單片機軟硬件的實現(xiàn)X24C04是XICOR公司的CMOS 4096位串行EEPROM,內(nèi)部組織成512×8位。16字節(jié)頁面寫。與MCS-51單片機接口如圖5所示。由于SDA是漏極開路輸出,且可以與任何數(shù)目的漏極開路或集電極開路輸出“線或”(wire-Ored)連接。上拉電阻的選擇可參考X24C04的數(shù)據(jù)??手冊。下面是通過I2C接口對X24C04進行單字節(jié)寫操作的例程。流程圖及源程序如下:???????????????????????????????????????????????????????????????????????????????????????????????
?????????
圖5 X24C04與51單片機接口
;名稱:BSENT
;描述:寫字節(jié)
;功能:寫一個字節(jié)
;調(diào)用程序:無
;輸入?yún)?shù):A
;輸出參數(shù):無
??????BSEND: MOV R2,#08H ;1字節(jié)8位
SENDA: CLR P3.2????;
????????RLC A??????????????;左移一位
?????MOV P3.3,C?????????;寫一位
SETB P3.2
DJNZ R2,SENDA??????;寫完8個字節(jié)?
CLR P3.2???????????;應(yīng)答信號
SETB P3.3
SETB P3.2
RET
?
?
5??結(jié)束語
?在I2C總線的應(yīng)用中應(yīng)注意的事項總結(jié)為以下幾點 :
??1) 嚴(yán)格按照時序圖的要求進行操作,
??2) 若與口線上帶內(nèi)部上拉電阻的單片機接口連接,可以不外加上拉電阻。
??3) 程序中為配合相應(yīng)的傳輸速率,在對口線操作的指令后可用NOP指令加一定的延時。
??4)為了減少意外的干擾信號將EEPROM內(nèi)的數(shù)據(jù)改寫可用外部寫保護引腳(如果有),或者在EEPROM內(nèi)部沒有用的空間寫入標(biāo)志字,每次上電時或復(fù)位時做一次檢測,判斷EEPROM是否被意外改寫。
??????????????????????????????????????????????????????????????????????關(guān)于IIC總線的操作注意事項
1、對IIC總線的一次操作完之后,需要等待一段時間才能進行第二次操作。否則是啟動不了總線的:)
2、在時鐘線(SCL)為高電平的時候,一定不能動數(shù)據(jù)線(SDA)狀態(tài),除非是啟動或者結(jié)束總線
OC門分析
??????我們先來說說集電極開路輸出的結(jié)構(gòu)。集電極開路輸出的結(jié)構(gòu)如圖1所示,右邊的那個三極管集電極什么都不接,所以叫做集電極開路(左邊的三極管為反相之用,使輸入為"0"時,輸出也為"0")。對于圖1,當(dāng)左端的輸入為“0”時,前面的三極管截止(即集電極C跟發(fā)射極E之間相當(dāng)于斷開),所以5V電源通過1K電阻加到右邊的三極管上,右邊的三極管導(dǎo)通(即相當(dāng)于一個開關(guān)閉合);當(dāng)左端的輸入為“1”時,前面的三極管導(dǎo)通,而后面的三極管截止(相當(dāng)于開關(guān)斷開)。
?
我們將圖1簡化成圖2的樣子。圖2中的開關(guān)受軟件控制,“1”時斷開,“0”時閉合。很明顯可以看出,當(dāng)開關(guān)閉合時,輸出直接接地,所以輸出電平為0。而當(dāng)開關(guān)斷開時,則輸出端懸空了,即高阻態(tài)。這時電平狀態(tài)未知,如果后面一個電阻負(fù)載(即使很輕的負(fù)載)到地,那么輸出端的電平就被這個負(fù)載拉到低電平了,所以這個電路是不能輸出高電平的。
再看圖三。圖三中那個1K的電阻即是上拉電阻。如果開關(guān)閉合,則有電流從1K電阻及開關(guān)上流過,但由于開關(guān)閉和時電阻為0(方便我們的討論,實際情況中開關(guān)電阻不為0,另外對于三極管還存在飽和壓降),所以在開關(guān)上的電壓為0,即輸出電平為0。如果開關(guān)斷開,則由于開關(guān)電阻為無窮大(同上,不考慮實際中的漏電流),所以流過的電流為0,因此在1K電阻上的壓降也為0,所以輸出端的電壓就是5V了,這樣就能輸出高電平了。但是這個輸出的內(nèi)阻是比較大的(即1KΩ),如果接一個電阻為R的負(fù)載,通過分壓計算,就可以算得最后的輸出電壓為5*R/(R+1000)伏,即5/(1+1000/R)伏。所以,如果要達(dá)到一定的電壓的話,R就不能太小。如果R真的太小,而導(dǎo)致輸出電壓不夠的話,那我們只有通過減小那個1K的上拉電阻來增加驅(qū)動能力。但是,上拉電阻又不能取得太小,因為當(dāng)開關(guān)閉合時,將產(chǎn)生電流,由于開關(guān)能流過的電流是有限的,因此限制了上拉電阻的取值,另外還需要考慮到,當(dāng)輸出低電平時,負(fù)載可能還會給提供一部分電流從開關(guān)流過,因此要綜合這些電流考慮來選擇合適的上拉電阻。
如果我們將一個讀數(shù)據(jù)用的輸入端接在輸出端,這樣就是一個IO口了(51的IO口就是這樣的結(jié)構(gòu),其中P0口內(nèi)部不帶上拉,而其它三個口帶內(nèi)部上拉),當(dāng)我們要使用輸入功能時,只要將輸出口設(shè)置為1即可,這樣就相當(dāng)于那個開關(guān)斷開,而對于P0口來說,就是高阻態(tài)了。
什么是漏極開路(OD)?
對于漏極開路(OD)輸出,跟集電極開路輸出是十分類似的。將上面的三極管換成場效應(yīng)管即可。這樣集電極就變成了漏極,OC就變成了OD,原理分析是一樣的。
另一種輸出結(jié)構(gòu)是推挽輸出。推挽輸出的結(jié)構(gòu)就是把上面的上拉電阻也換成一個開關(guān),當(dāng)要輸出高電平時,上面的開關(guān)通,下面的開關(guān)斷;而要輸出低電平時,則剛好相反。比起OC或者OD來說,這樣的推挽結(jié)構(gòu)高、低電平驅(qū)動能力都很強。如果兩個輸出不同電平的輸出口接在一起的話,就會產(chǎn)生很大的電流,有可能將輸出口燒壞。而上面說的OC或OD輸出則不會有這樣的情況,因為上拉電阻提供的電流比較小。如果是推挽輸出的要設(shè)置為高阻態(tài)時,則兩個開關(guān)必須同時斷開(或者在輸出口上使用一個傳輸門),這樣可作為輸入狀態(tài),AVR單片機的一些IO口就是這種結(jié)構(gòu)。
?
一些公司的電子類筆試題
1、FPGA和ASIC的概念,他們的區(qū)別。
???????答:FPGA是可編程ASIC。ASIC:專用集成電路,它是面向?qū)iT用途的電路,專門為一個用戶設(shè)計和制造的。
2、建立時間(setup time)與保持時間(hold time)意思?
???????答:建立時間是指觸發(fā)器的時鐘信號上升沿到來以前,數(shù)據(jù)穩(wěn)定不變的時間。輸入信號應(yīng)提前時鐘上升沿(如上升沿有效)T時間到達(dá)芯片,這個T就是建立時間-Setup time.如不滿足setup time,這個數(shù)據(jù)就不能被這一時鐘打入觸發(fā)器,只有在下一個時鐘上升沿,數(shù)據(jù)才能被打入觸發(fā)器。保持時間是指觸發(fā)器的時鐘信號上升沿到來以后,數(shù)據(jù)穩(wěn)定不變的時間。如果hold time不夠,數(shù)據(jù)同樣不能被打入觸發(fā)器。???如果不滿足建立和保持時間的話,那么DFF將不能正確地采樣到數(shù)據(jù),將會出現(xiàn)metastability(亞穩(wěn)態(tài))的情況。如果數(shù)據(jù)信號在時鐘沿觸發(fā)前后持續(xù)的時間均超過建立和保持時間,那么超過量就分別被稱為建立時間裕量和保持時間裕量。
3、什么是競爭與冒險現(xiàn)象?怎樣判斷?如何消除?
???????答:在組合邏輯中,由于門的輸入信號通路中經(jīng)過了不同的延時,導(dǎo)致到達(dá)該門的時間不一致叫競爭。產(chǎn)生毛刺叫冒險。如果布爾式中有相反的信號則可能產(chǎn)生競爭和冒險現(xiàn)象。解決方法:一是添加布爾式的消去項,二是在芯片外部加電容。
4、同步電路和異步電路的區(qū)別是什么?
???????答:同步電路:存儲電路中所有觸發(fā)器的時鐘輸入端都接同一個時鐘脈沖源,因而所有觸發(fā)器的狀態(tài)的變化都與所加的時鐘脈沖信號同步。異步電路:電路沒有統(tǒng)一的時鐘,有些觸發(fā)器的時鐘輸入端與時鐘脈沖源相連,這有這些觸發(fā)器的狀態(tài)變化與時鐘脈沖同步,而其他的觸發(fā)器的狀態(tài)變化不與時鐘脈沖同步。
5、什么是NMOS、PMOS、CMOS?什么是增強型、耗盡型?什么是PNP、NPN?他們有什么差別?
???????答:MOS場效應(yīng)管即金屬-氧化物-半導(dǎo)體型場效應(yīng)管,英文縮寫為MOSFET(Metal-Oxide-Semiconductor Field-Effect-Transistor),屬于絕緣柵型。其主要特點是在金屬柵極與溝道之間有一層二氧化硅絕緣層,因此具有很高的輸入電阻(最高可達(dá)1015Ω)。它也分N溝道管和P溝道管,符號如圖1所示。通常是將襯底(基板)與源極S接在一起。根據(jù)導(dǎo)電方式的不同,MOSFET又分增強型、耗盡型。所謂增強型是指:當(dāng)VGS=0時管子是呈截止?fàn)顟B(tài),加上正確的VGS后,多數(shù)載流子被吸引到柵極,從而“增強”了該區(qū)域的載流子,形成導(dǎo)電溝道。耗盡型則是指,當(dāng)VGS=0時即形成溝道,加上正確的VGS時,能使多數(shù)載流子流出溝道,因而“耗盡”了載流子,使管子轉(zhuǎn)向截止。?
???????????PNP與NPN的區(qū)別在表面上是以PN結(jié)的方向來定義的,實際上是以三極管的結(jié)構(gòu)材料來區(qū)分的。PNP是兩邊的棒料是鎵,中間的是硅。鎵是第三主族的元素,其核外為三個電子,硅是第四主族的元素,其核外有四個電子,這樣在兩個PN的方向上的順序是P-N-N的關(guān)系;相反NPN是兩邊的材料是硅,中間的是鎵,形成的PN結(jié)順序為N-P-N的關(guān)系。?
順便說明:P的意思是在PN結(jié)上缺少電子,以空穴為主導(dǎo)電的材料,也叫P型材料;N的意思是在PN結(jié)上有多余的電子,以電子為主導(dǎo)電的材料,也叫N型材料。
突然找到一個別人整理好的版本:
?
1、同步電路和異步電路的區(qū)別是什么?(仕蘭微電子)
異步電路主要是組合邏輯電路,用于產(chǎn)生地址譯碼器、FIFO或RAM的讀寫控制信號脈沖,但它同時也用在時序電路中,此時它沒有統(tǒng)一的時鐘,狀態(tài)變化的時刻是不穩(wěn)定的,通常輸入信號只在電路處于穩(wěn)定狀態(tài)時才發(fā)生變化。也就是說一個時刻允許一個輸入發(fā)生變化,以避免輸入信號之間造成的競爭冒險。電路的穩(wěn)定需要有可靠的建立時間和持時間,待下面介紹。
??????同步電路是由時序電路(寄存器和各種觸發(fā)器)和組合邏輯電路構(gòu)成的電路,其所有操作都是在嚴(yán)格的時鐘控制下完成的。這些時序電路共享同一個時鐘CLK,而所有的狀態(tài)變化都是在時鐘的上升沿(或下降沿)完成的。比如D觸發(fā)器,當(dāng)上升延到來時,寄存器把D端的電平傳到Q輸出端。
在同步電路設(shè)計中一般采用D觸發(fā)器,異步電路設(shè)計中一般采用Latch。
2、什么是同步邏輯和異步邏輯?(漢王筆試)
同步邏輯是時鐘之間有固定的因果關(guān)系。異步邏輯是各時鐘之間沒有固定的因果關(guān)系。
電路設(shè)計可分類為同步電路和異步電路設(shè)計。同步電路利用時鐘脈沖使其子系統(tǒng)同步運作,而異步電路不使用時鐘脈沖做同步,其子系統(tǒng)是使用特殊的“開始”和“完成”信號使之同步。由于異步電路具有下列優(yōu)點--無時鐘歪斜問題、低電源消耗、平均效能而非最差效能、模塊性、可組合和可復(fù)用性--因此近年來對異步電路研究增加快速,論文發(fā)表數(shù)以倍增,而Intel Pentium 4處理器設(shè)計,也開始采用異步電路設(shè)計。
異步電路主要是組合邏輯電路,用于產(chǎn)生地址譯碼器、FIFO或RAM的讀寫控制信號脈沖,其邏輯輸出與任何時鐘信號都沒有關(guān)系,譯碼輸出產(chǎn)生的毛刺通常是可以監(jiān)控的。同步電路是由時序電路(寄存器和各種觸發(fā)器)和組合邏輯電路構(gòu)成的電路,其所有操作都是在嚴(yán)格的時鐘控制下完成的。這些時序電路共享同一個時鐘CLK,而所有的狀態(tài)變化都是在時鐘的上升沿(或下降沿)完成的。
3、什么是"線與"邏輯,要實現(xiàn)它,在硬件特性上有什么具體要求?(漢王筆試)
線與邏輯是兩個輸出信號相連可以實現(xiàn)與的功能。在硬件上,要用oc門來實現(xiàn)(漏極或者集電極開路),由于不用oc門可能使灌電流過大,而燒壞邏輯門,同時在輸出端口應(yīng)加一個上拉電阻。(線或則是下拉電阻)
4、什么是Setup 和Holdup時間?(漢王筆試)
5、setup和holdup時間,區(qū)別.(南山之橋)
6、解釋setup time和hold time的定義和在時鐘信號延遲時的變化。(未知)
7、解釋setup和hold time violation,畫圖說明,并說明解決辦法。(威盛VIA 2003.11.06 上海筆試試題)
時間(Setup Time)和保持時間(Hold time)。建立時間是指在時鐘邊沿前,數(shù)據(jù)信號需要保持不變的時間。保持時間是指時鐘跳變邊沿后數(shù)據(jù)信號需要保持不變的時間。如果不滿足建立和保持時間的話,那么DFF將不能正確地采樣到數(shù)據(jù),將會出現(xiàn)metastability的情況。如果數(shù)據(jù)信號在時鐘沿觸發(fā)前后持續(xù)的時間均超過建立和保持時間,那么超過量就分別被稱為建立時間裕量和保持時間裕量。
8、說說對數(shù)字邏輯中的競爭和冒險的理解,并舉例說明競爭和冒險怎樣消除。(仕蘭微電子)
9、什么是競爭與冒險現(xiàn)象?怎樣判斷?如何消除?(漢王筆試)
在組合邏輯中,由于門的輸入信號通路中經(jīng)過了不同的延時,導(dǎo)致到達(dá)該門的時間不一致叫競爭。產(chǎn)生毛刺叫冒險。如果布爾式中有相反的信號則可能產(chǎn)生競爭和冒險現(xiàn)象。解決方法:一是添加布爾式的(冗余)消去項,但是不能避免功能冒險,二是在芯片外部加電容。三是增加選通電路
在組合邏輯中,由于多少輸入信號變化先后不同、信號傳輸?shù)穆窂讲煌?#xff0c;或是各種器件延遲時間不同(這種現(xiàn)象稱為競爭)都有可能造成輸出波形產(chǎn)生不應(yīng)有的尖脈沖(俗稱毛刺),這種現(xiàn)象成為冒險。
10、你知道那些常用邏輯電平?TTL與COMS電平可以直接互連嗎?(漢王筆試)
常用邏輯電平:TTL、CMOS、LVTTL、LVCMOS、ECL(Emitter Coupled Logic)、PECL(Pseudo/Positive Emitter Coupled Logic)、LVDS(Low Voltage Differential Signaling)、GTL(Gunning Transceiver Logic)、BTL(Backplane Transceiver Logic)、ETL(enhanced transceiver logic)、GTLP(Gunning Transceiver Logic Plus);RS232、RS422、RS485(12V,5V,3.3V);TTL和CMOS不可以直接互連,由于TTL是在0.3-3.6V之間,而CMOS則是有在12V的有在5V的。CMOS輸出接到TTL是可以直接互連。TTL接到CMOS需要在輸出端口加一上拉電阻接到5V或者12V。
cmos的高低電平分別為:Vih>=0.7VDD,Vil<=0.3VDD;Voh>=0.9VDD,Vol<=0.1VDD.
ttl的為:Vih>=2.0v,Vil<=0.8v;Voh>=2.4v,Vol<=0.4v.
用cmos可直接驅(qū)動ttl;加上拉電阻后,ttl可驅(qū)動cmos.
1、當(dāng)TTL電路驅(qū)動COMS電路時,如果TTL電路輸出的高電平低于COMS電路的最低高電平(一般為3.5V),這時就需要在TTL的輸出端接上拉電阻,以提高輸出高電平的值。
2、OC門電路必須加上拉電阻,以提高輸出的搞電平值。
3、為加大輸出引腳的驅(qū)動能力,有的單片機管腳上也常使用上拉電阻。
4、在COMS芯片上,為了防止靜電造成損壞,不用的管腳不能懸空,一般接上拉電阻產(chǎn)生降低輸入阻抗,提供泄荷通路。
5、芯片的管腳加上拉電阻來提高輸出電平,從而提高芯片輸入信號的噪聲容限增強抗干擾能力。
6、提高總線的抗電磁干擾能力。管腳懸空就比較容易接受外界的電磁干擾。
7、長線傳輸中電阻不匹配容易引起反射波干擾,加上下拉電阻是電阻匹配,有效的抑制反射波干擾。
上拉電阻阻值的選擇原則包括:
1、從節(jié)約功耗及芯片的灌電流能力考慮應(yīng)當(dāng)足夠大;電阻大,電流小。
2、從確保足夠的驅(qū)動電流考慮應(yīng)當(dāng)足夠小;電阻小,電流大。
3、對于高速電路,過大的上拉電阻可能邊沿變平緩。綜合考慮
以上三點,通常在1k到10k之間選取。對下拉電阻也有類似道理
//OC門電路必須加上拉電阻,以提高輸出的搞電平值。
OC門電路要輸出“1”時才需要加上拉電阻不加根本就沒有高電平
在有時我們用OC門作驅(qū)動(例如控制一個LED)灌電流工作時就可以不加上拉電阻
OC門可以實現(xiàn)“線與”運算
OC門就是??集電極開路輸出
總之加上拉電阻能夠提高驅(qū)動能力。
什么是OC門?
?????????OC門,又稱集電極開路(漏極開路)與非門門電路,Open Collector(Open Drain)。為什么引入OC門?實際使用中,有時需要兩個或兩個以上與非門的輸出端連接在同一條導(dǎo)線上,將這些與非門上的數(shù)據(jù)(狀態(tài)電平)用同一條導(dǎo)線輸送出去。因此,需要一種新的與非門電路--OC門來實現(xiàn)“線與邏輯”。
????????OC門主要用于3個方面:
1、實現(xiàn)與或非邏輯,用做電平轉(zhuǎn)換,用做驅(qū)動器。由于OC門電路的輸出管的集電極懸空,使用時需外接一個上拉電阻Rp到電源VCC。OC門使用上拉電阻以輸出高電平,此外為了加大輸出引腳的驅(qū)動能力,上拉電阻阻值的選擇原則,從降低功耗及芯片的灌電流能力考慮應(yīng)當(dāng)足夠大;從確保足夠的驅(qū)動電流考慮應(yīng)當(dāng)足夠小。
2、線與邏輯,即兩個輸出端(包括兩個以上)直接互連就可以實現(xiàn)“AND”的邏輯功能。在總線傳輸?shù)葘嶋H應(yīng)用中需要多個門的輸出端并聯(lián)連接使用,而一般TTL門輸出端并不能直接并接使用,否則這些門的輸出管之間由于低阻抗形成很大的短路電流(灌電流),而燒壞器件。在硬件上,可用OC門或三態(tài)門(ST門)來實現(xiàn)。用OC門實現(xiàn)線與,應(yīng)同時在輸出端口應(yīng)加一個上拉電阻。
3、三態(tài)門(ST門)主要用在應(yīng)用于多個門輸出共享數(shù)據(jù)總線,為避免多個門輸出同時占用數(shù)據(jù)總線,這些門的使能信號(EN)中只允許有一個為有效電平(如高電平),由于三態(tài)門的輸出是推拉式的低阻輸出,且不需接上拉(負(fù)載)電阻,所以開關(guān)速度比OC門快,常用三態(tài)門作為輸出緩沖器。
11、如何解決亞穩(wěn)態(tài)。(飛利浦-大唐筆試)?
亞穩(wěn)態(tài)是指觸發(fā)器無法在某個規(guī)定時間段內(nèi)達(dá)到一個可確認(rèn)的狀態(tài)。當(dāng)一個觸發(fā)器進入亞穩(wěn)態(tài)時,既無法預(yù)測該單元的輸出電平,也無法預(yù)測何時輸出才能穩(wěn)定在某個正確的電平上。在這個穩(wěn)定期間,觸發(fā)器輸出一些中間級電平,或者可能處于振蕩狀態(tài),并且這種無用的輸出電平可以沿信號通道上的各個觸發(fā)器級聯(lián)式傳播下去。
解決方法:
1降低系統(tǒng)時鐘頻率
2用反應(yīng)更快的FF
3引入同步機制,防止亞穩(wěn)態(tài)傳播
4改善時鐘質(zhì)量,用邊沿變化快速的時鐘信號
關(guān)鍵是器件使用比較好的工藝和時鐘周期的裕量要大。亞穩(wěn)態(tài)寄存用d只是一個辦法,有時候通過not,buf等都能達(dá)到信號過濾的效果
12、IC設(shè)計中同步復(fù)位與異步復(fù)位的區(qū)別。(南山之橋)
同步復(fù)位在時鐘沿采復(fù)位信號,完成復(fù)位動作。異步復(fù)位不管時鐘,只要復(fù)位信號滿足條件,就完成復(fù)位動作。異步復(fù)位對復(fù)位信號要求比較高,不能有毛刺,如果其與時鐘關(guān)系不確定,也可能出現(xiàn)亞穩(wěn)態(tài)。
13、MOORE 與 MEELEY狀態(tài)機的特征。(南山之橋)
???Moore狀態(tài)機的輸出僅與當(dāng)前狀態(tài)值有關(guān),且只在時鐘邊沿到來時才會有狀態(tài)變化. Mealy狀態(tài)機的輸出不僅與當(dāng)前狀態(tài)值有關(guān),而且與當(dāng)前輸入值有關(guān),這
14、多時域設(shè)計中,如何處理信號跨時域。(南山之橋)
不同的時鐘域之間信號通信時需要進行同步處理,這樣可以防止新時鐘域中第一級觸發(fā)器的亞穩(wěn)態(tài)信號對下級邏輯造成影響,其中對于單個控制信號可以用兩級同步器,如電平、邊沿檢測和脈沖,對多位信號可以用FIFO,雙口RAM,握手信號等。
跨時域的信號要經(jīng)過同步器同步,防止亞穩(wěn)態(tài)傳播。例如:時鐘域1中的一個信號,要送到時鐘域2,那么在這個信號送到時鐘域2之前,要先經(jīng)過時鐘域2的同步器同步后,才能進入時鐘域2。這個同步器就是兩級d觸發(fā)器,其時鐘為時鐘域2的時鐘。這樣做是怕時鐘域1中的這個信號,可能不滿足時鐘域2中觸發(fā)器的建立保持時間,而產(chǎn)生亞穩(wěn)態(tài),因為它們之間沒有必然關(guān)系,是異步的。這樣做只能防止亞穩(wěn)態(tài)傳播,但不能保證采進來的數(shù)據(jù)的正確性。所以通常只同步很少位數(shù)的信號。比如控制信號,或地址。當(dāng)同步的是地址時,一般該地址應(yīng)采用格雷碼,因為格雷碼每次只變一位,相當(dāng)于每次只有一個同步器在起作用,這樣可以降低出錯概率,象異步FIFO的設(shè)計中,比較讀寫地址的大小時,就是用這種方法。如果兩個時鐘域之間傳送大量的數(shù)據(jù),可以用異步FIFO來解決問題。
我們可以在跨越Clock Domain時加上一個低電平使能的Lockup Latch以確保Timing能正確無誤。
?
1、基爾霍夫定理的內(nèi)容是什么?
基爾霍夫定律包括電流定律和電壓定律
電流定律:在集總電路中,任何時刻,對任一節(jié)點,所有流出節(jié)點的支路電流的代數(shù)和恒等于零。
電壓定律:在集總電路中,任何時刻,沿任一回路,所有支路電壓的代數(shù)和恒等于零。
2、描述反饋電路的概念,列舉他們的應(yīng)用。
反饋,就是在電子系統(tǒng)中,把輸出回路中的電量輸入到輸入回路中去。
反饋的類型有:電壓串聯(lián)負(fù)反饋、電流串聯(lián)負(fù)反饋、電壓并聯(lián)負(fù)反饋、電流并聯(lián)負(fù)反饋。
負(fù)反饋的優(yōu)點:降低放大器的增益靈敏度,改變輸入電阻和輸出電阻,改善放大器的線性和非線性失真,有效地擴展放大器的通頻帶,自動調(diào)節(jié)作用。
電壓負(fù)反饋的特點:電路的輸出電壓趨向于維持恒定。
電流負(fù)反饋的特點:電路的輸出電流趨向于維持恒定。
3、有源濾波器和無源濾波器的區(qū)別
無源濾波器:這種電路主要有無源元件R、L和C組成
有源濾波器:集成運放和R、C組成,具有不用電感、體積小、重量輕等優(yōu)點。
集成運放的開環(huán)電壓增益和輸入阻抗均很高,輸出電阻小,構(gòu)成有源濾波電路后還具有一定的電壓放大和緩沖作用。但集成運放帶寬有限,所以目前的有源濾波電路的工作頻
轉(zhuǎn)自:http://www.cnblogs.com/smart_qiang/archive/2009/2/22.html
轉(zhuǎn)載于:https://www.cnblogs.com/lqf2060/p/4802687.html
總結(jié)
以上是生活随笔為你收集整理的IIC、SPI和UART区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32之UART
- 下一篇: 中药学【29】