電子系統設計(第二版)課件:數據通信_第1頁
電子系統設計(第二版)課件:數據通信_第2頁
電子系統設計(第二版)課件:數據通信_第3頁
電子系統設計(第二版)課件:數據通信_第4頁
電子系統設計(第二版)課件:數據通信_第5頁
已閱讀5頁,還剩124頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

數據通信6.1RS-232通信6.2RS-485通信6.3紅外通信6.4無線通信設備之間的數據通信是產品設計中常見的要求,數據通信的實現方法較多,總體歸納為無線和有線兩種。無線通信主要有紅外、藍牙、ZigBee等,有線通信主要有RS-232、USB、M_BUS、CAN等。本章主要介紹設計中常用的幾種較易實現的通信方法,如RS-232、RS-485、紅外和CC1100。對于藍牙、USB等可以通過專用的轉換芯片將其轉換為常見的UART通信方式,本章不做具體講解。

計算機與計算機或計算機與終端之間的數據傳送可以采用串行通信和并行通信兩種方式。由于串行通信方式具有使用線路少、成本低,特別是在遠程傳輸時,避免了多條線路特性的不一致而被廣泛采用。在串行通信時,要求通信雙方都采用一個標準接口,使不同的設備可以方便地連接起來進行通信。6.1RS-232通信RS-232-C接口(又稱EIARS-232-C)是目前最常用的一種串行通信接口,它是在1970年由美國電子工業協會(EIA)聯合貝爾系統、調制解調器廠家及計算機終端生產廠家共同制定的用于串行通信的標準,全名是“數據終端設備(DTE)和數據通信設備(DCE)之間串行二進制數據交換接口技術標準”。該標準規定采用一個25個引腳的DB-25連接器,對連接器的每個引腳的信號內容加以規定,還對各種信號的電平加以規定。

(1)接口的信號內容:RS-232-C的25條引線中有許多是很少使用的,在計算機與終端通信中一般只使用3~9條引線。

(2)接口的電氣特性:在RS-232-C中任何一條信號線的電壓均為負邏輯關系。即:邏輯“1”,電平為

-5V~-15V;邏輯“0”,電平為

+5V~+15V;噪聲容限為2V。要求接收器能識別低至

+3V的信號作為邏輯“0”,高到

-3V的信號作為邏輯“1”。

(3)接口的物理結構:RS-232-C接口連接器一般使用型號為DB-25的25芯插頭座,通常插頭在DCE端,插座在DTE端。一些設備與PC連接的RS-232-C接口,因為不使用對方的傳送控制信號,只需三條接口線,即“發送數據”、“接收數據”和“信號地”,所以采用DB-9的9芯插頭座,傳輸線采用屏蔽雙絞線。

(4)傳輸電纜長度:由于RS-232-C標準規定在碼元畸變小于4%的情況下,傳輸電纜長度應為50英尺,其實這個4%的碼元畸變是很保守的,在實際應用中,約有99%的用戶是按碼元畸變10%~20%的范圍工作的,所以實際使用中最大距離會遠超過50英尺。6.1.1RS-232通信芯片

RS-232通信芯片較多,幾乎每個IC廠商都生產,下面以SIPEX公司生產的SP3232E為例介紹其功能。

SP3232E接收器滿足EIA/TIA-232通信協議,包含SIPEX系列特有的片內電荷泵電路,可從3.0V~5.5V的電源電壓產生2

×

UCC的RS-232電壓電平。SP3232E由3個基本電路模塊組成:驅動器、接收器和電荷泵。

驅動器是一個反相發送器,它將TTL或CMOS邏輯電平轉換為與輸入邏輯電平相反的EIA/TIA-232電平。發送器的輸出被保護,預防一直短路到地的情況,從而使得其可靠性不受影響。驅動器輸出在電源電壓低至2.7V時也可滿足EIA/TIA-232的

±3.7V電平。

接收器是把EIA/TIA-232電平轉換成TTL或CMOS邏輯輸出電平。

電荷泵需要4個外接電容,但運用一種4相電壓轉換技術,保持輸出對稱的5.5V電源。內部電壓源由一對可調節的電荷泵組成,即使輸入電壓UCC超過3.0V~5.5V的范圍,電荷泵仍能提供5.5V輸出電壓。

SP3232E的特點如下:

(1)符合電子工業聯合會制定的EIA/TIA-232通信協議;

(2)數據的傳輸速率為250kb/s;

(3)低功耗芯片,接收數據時的電流為1μA;

(4)有兩個發送接收通道。

SP3232E芯片的引腳封裝圖如圖6-1所示。

圖6-1SP3232E芯片的引腳封裝圖

SP3232E芯片的引腳功能說明如下:

VCC:+5V供電電源;

GND:電源地;

V+:供給正極輸出;

V-:供給負極輸出;

R1IN,R2IN:RS-232接收輸入端;

T1OUT,T2OUT:RS-232發送輸出端;

R1OUT,R2OUT:TTL/CMOS接收輸出端;

T1IN,T2IN:TTL/CMOS發送輸入端;

C1+,C1-:連接電容1;

C2+,C2-:連接電容2。6.1.2RS-232通信實例

MSP430F133內部自帶UART通信模塊,因此,只需將SP3232的TTL/CMOS接收、發送端與單片機的UTXD、URXD相連,即可通過單片機內部UART通信模塊將需要傳輸的數據通過RS-232通信方式實現。MSP430F133與SP3232接口電路如圖6-2所示。

圖6-2MSP430F133與SP3232接口電路

UART模塊初始化子函數:將UART初始化為波特率1200;數據位8位;無奇偶校驗;1位停止位。

voidInit_UART1(void)

{

U1CTL=CHAR+PEV+PENA; //8-bitcharacter

U1TCTL=SSEL1; //UCLK=MCLK

U1BR0=0x0A; //8MHz1200

U1BR1=0x1A; //8MHz1200

U1MCTL=0x00; //8MHz1200modulation

ME2|=UTXE1+URXE1; //EnableUSART0TXD/RXD

IE2|=URXIE1; //EnableUSART0RXinterrupt

P3SEL|=0x30; //P3.4,5=USART0TXD/RXD

P3DIR|=0x10; //P3.4outputdirection

return;

}

UART發送數據子函數:UART發送一個字節數據,在程序中調用此函數,而不是使用中斷。

voidUART1_TX_byte(unsignedchardata)

{

while((IFG2&UTXIFG1)!=UTXIFG1);//USART1TXbufferready?

U1TXBUF=data;

}

UART接收數據子函數:該函數是一中斷程序,在初始化時需將接收數據設置為中斷,當收到數據后,程序自動進入該子程序處理。

#pragmavector=USART1RX_VECTOR/*0xFFE6USART1Receive*/

_interruptvoidusart1_rx_sever(void)

{

inti;

i=U1RXBUF;

//處理接收的數據,如數據處理時間較長,則可將數據存在一個全局變量數組中,在此處置

//標志位,在主程序中檢測此處置的標志位來判斷是否有數據需處理

}

RS-485標準是一種平衡傳輸方式的串行接口標準。與RS-422A標準相比,RS-485標準擴展了RS-422A的性能,是一種多發送器的電路標準,它允許在雙導線上有多個發送器,也允許一個發送器驅動多個負載設備。6.2RS-485通信

RS-485接口標準網絡的典型應用如圖6-3所示,由于一對平衡傳輸的兩端都配置了終端電阻,其發送器、接收器及組合收發器都可以掛接在平衡傳輸線的任意位置,從而實現了數據傳輸中多個驅動器和接收器公用一條傳輸線的多點應用。

圖6-3RS-485接口標準網絡的典型應用雖然RS-485標準允許電路中出現多個發送器,但RS-485僅能工作于半雙工方式,即任一時刻只允許一個發送器發送數據,而其他組件只能處于接收狀態。

RS-485標準的特點是抗干擾能力強、傳輸距離遠、速率高。如果采用雙絞線傳輸信號,最大傳輸速率為10Mb/s,傳輸距離為15m;如果最大傳輸速率為100kb/s,則可以傳輸

1200m;如果最大傳輸速率為9600b/s,則傳輸距離可達1500m。

RS-485標準最多允許在平衡電纜上連接32個發送器/接收器,特別適用于工業控制領域進行分布管理、聯網檢測控制等。6.2.1RS-485通信原理

RS-485與RS-232不一樣,數據信號采用差分傳輸方式,也稱做平衡傳輸方式,即使用一對雙絞線,將其中一線定義為A,另一線定義為B。通常情況下,發送驅動器A、B之間的正電平為

+2

V~+6

V,是一個邏輯狀態,負電平為

-2V~-6V,是另一個邏輯狀態。RS-485中還有一個“使能”端,用于控制發送驅動器和傳輸線的切斷與連接。當“使能”端起作用時,發送驅動器處于高阻狀態,稱做“第三態”,即它是有別于邏輯“1”與“0”的第三態。接收端也作與發送端相對的規定,收、發端通過平衡雙絞線將AA與BB對應相連,當在接收端A、B之間有大于

+200mV的電平時,輸出正邏輯電平;當有小于

-200mV的電平時,輸出負邏輯電平。接收器接收平衡線上的電平范圍為200mV~6V。6.2.2RS-485通信芯片

SP3485是一款

+3.3V低功耗半雙工收發器,完全滿足RS-485和RS-422串行協議的要求。其特性如下:

(1)

+3.3V單電源供電;

(2)兼容5V系統;

(3)

12Mb/s的數據傳輸速率;

(4)正常情況下的輸入電壓范圍為

-7V~12V;

(5)兼容全雙工和半雙工通信協議;

圖6-4SP3485芯片的引腳封裝圖

(6)具有過載保護功能(當電路電流或熱量超過標準時,會自動斷開電路)。

SP3485芯片的引腳封裝圖如圖6-4所示。

SP3485的引腳功能說明如下:

VCC:供電電源(3.0V

<

UCC

<

3.6V);

RO:RS-485接收輸出端;

DI:RS-485發送輸入端;

GND:電源地;

Y:差分發送輸出端(+);

Z:差分發送輸出端(-);

B:差分接收輸入端(+);

A:差分接收輸入端(-)。

SP3485的發送輸出端和接收輸入端都是差分形式,其中RO將接收的數據發送給MCU,DI將MCU要發送的數據發送給RS-485。SP3485發送和接收數據時對應的輸入/輸出狀態如表6-1和表6-2所示。

表6-1SP3485發送數據時對應的輸入/輸出狀態表6-2SP3485接收數據時對應的輸入/輸出狀態

RS-485協議一般在工業環境下,特別是噪聲干擾比較大的環境下工作,所以外界對系統的影響比較大。為了防止外界環境的突變產生瞬間較大電流燒毀MCU芯片,在電氣平臺設計時,采用光耦隔離的方式,將系統與外界環境隔離,從而很好地保護系統硬件。HYM3082隔離通信電路如圖6-5所示,該電路的光耦只適合應用于低速場合,如通信速率較高,建議使用高速光耦。

圖6-5HYM3082隔離通信電路

隨著移動計算設備和移動通信設備的日益普及,紅外數據通信應用越來越多。紅外通信技術由于成本低廉和廣泛的兼容性等優點,已在近距離的無線數據傳輸領域占有重要地位。6.3紅外通信6.3.1IrDA及其通信協議

IrDA即紅外數據組織,是1993年6月成立的一個國際性組織,專門制訂和推進能共同使用的低成本紅外數據互連標準,支持點對點的工作模式。由于標準的統一和應用的廣泛,更多的公司開始開發和生產IrDA模塊,技術的進步也使得IrDA模塊的集成度越來越高,體積也越來越小。IrDA1.0可支持最高115.2kb/s的通信速率,而IrDA1.1可以支持的通信速率達到4Mb/s。

IrDA數據通信按發送速率分為三大類:SIR、MIR和FIR。串行紅外(SIR)的速率覆蓋了RS-232端口通常支持的速率(9.6kb/s~115.2kb/s)。中速紅外(MIR)可支持0.576Mb/s和1.152Mb/s的速率;高速紅外(FIR)通常用于4Mb/s的速率,有時也可用于高于SIR的所有速率。

在IrDA中,物理層、鏈路接入協議(IrLAP)和鏈路管理協議(IrLMP)是必需的三個協議層。除此之外,還有一些適用于特殊應用模式的可選層。在基本的IrDA應用模式中,設備分為主設備和從設備。主設備用于探測它的可視范圍,尋找從設備,然后從那些響應它的設備中選擇一個并試圖建立連接。在建立連接的過程中,兩個設備彼此相互協調,按照它們共同的最高通信能力確定最后的通信速率。以上的“尋找”和“協調”過程都是在9.6kb/s的速率下進行的。數據速率小于4Mb/s時,使用RZI(反相歸零)調制,最大脈沖寬度是位周期的3/16;而當數據速率為4Mb/s時,使用4PPM(脈沖位置)調制。IrDA要求的RZI調制的編碼效果如圖6-6中的IR幀數據所示。

圖6-6IrDA調制(3/16)

IrDA數據通信工作在半雙工模式,因為在發射時,接收器會被發射的光芒所屏蔽。這樣,通信的兩個設備將通過快速轉換鏈路來模擬全雙工通信,并由主設備負責控制鏈路的時序。

IrDA協議按層安排,應用程序的數據逐層下傳,最終以光脈沖的形式發出。在物理層上的第一層是鏈路接入協議(IrLAP),它是HDLC(高級數據鏈路控制)協議的改編,以適應紅外傳輸的要求。IrLAP層的工作是進行鏈路初始化、設備地址尋找和解決沖突、啟動連接、數據交換、斷開連接和鏈路關閉等。IrLAP用于指定紅外數據包的幀和字節結構,以及紅外通信的錯誤檢測方法。IrLAP之上的一層是鏈路管理協議(IrLMP),主要用于管理IrLAP所提供的鏈路連接中的鏈路功能和應用程序以及評估設備上的服務,并管理如數據速率、BOF的數量(幀的開始)及連接換向時間等參數的協調,以及數據的糾錯傳輸等。

IrDA物理層協議提出了對工作距離、工作角度(視角)、光功率、數據速率等不同品牌設備互聯時抗干擾能力的建議。當前紅外通信距離最長為3m,接收角度為30°。6.3.2HDSL7001芯片概述

紅外通信的基本原理是發送端將基帶二進制信號調制為一系列的脈沖信號,再通過紅外發射管發射紅外信號。

串行紅外傳輸采用特定的脈沖編碼標準,這種標準與RS-232串行傳輸標準不同。若兩設備之間進行串行紅外通信,就需要進行RS-232編碼和IrDA編碼之間的轉換。紅外通信接口由紅外收發器和紅外編碼解碼器構成。

紅外收發器包括發送器和接收器兩部分。發送器(Transmitter)將從I/O或ENDEC接收來的位調制后的脈沖轉換為紅外脈沖發出。接收器(Receiver)檢測到紅外光脈沖,并將其轉換為TTL或CMOS電脈沖。

Agilent公司生產的HSDL7001芯片可實現RS-232編碼和IrDA編碼之間的轉換。HSDL7001紅外編碼解碼芯片的特性如下:

(1)適應IrDA1.0物理層規范;

(2)接口與SIR收發器相兼容;

(3)可與標準的16550UART連接使用;

(4)可發送/接收1.63μs或3/16脈沖形式;

(5)內部或外部時鐘模式;

(6)波特率可編程;

(7)工作電壓范圍為2.7V~5.5V;

(8)采用16腳SOIC封裝。

HSDL7001的引腳排列如圖6-7所示。其引腳說明如下:

16XCLK:外部時鐘輸入引腳,輸入的時鐘是數據傳輸波特率的16倍;

:串口輸入引腳,接收來自串口的數據,將數據調制成紅外發送數據;

圖6-7HSDL7001的引腳排列

RCV:串口輸出數據,將接收到的紅外數據解調后輸出給串口;

A0、A1、A2:時鐘的除法系數選擇引腳;

CLK_SEL:時鐘選擇引腳,該引腳輸入為高電平,選擇外部時鐘,即時鐘為16XCLK引腳輸入的時鐘;

GND:電源地引腳;

VCC:電源引腳;

:復位引腳;

:紅外數據接收引腳;

IR_TXD:紅外數據發送引腳;

PULSEMOD:脈沖模式選擇引腳;

POWERDN:低功耗選擇引腳,如果該引腳輸入高電平,芯片進入低功耗模式;

OSCIN、OSCOUT:晶體振蕩電路的輸入、輸出引腳。6.3.3HDSL3201芯片概述

HSDL3201是一種廉價的紅外收發器模塊,工作電壓為2.7V~3.6V。由于發光二極管的驅動電流是內部供給的恒流32mA,因此確保了連接距離符合IrDA1.2(低功耗)物理層規范。HSDL3201的特性如下:

(1)超小型表面封裝;

(2)最小高度為2.5mm;

(3)發光二極管的電壓范圍為2.7V~6.0V;

(4)溫度范圍為-25℃~85℃;

(5)發光二極管的驅動電流為32mA;

(6)邊緣檢測輸入,避免發光二極管的開啟時間過長。

HSDL3201的引腳排列如圖6-8所示。其引腳說明如下:

VCC:電源引腳;

圖6-8HSDL3201的引腳排列

GND:電源地引腳;

AGND:模擬接地引腳;

SD:低功耗引腳,如果該引腳接入高電平,則芯片進入低功耗狀態;

TXD:傳輸數據輸入引腳;

RXD:接收數據輸出引腳;

VLED:LED的電源引腳。6.3.4紅外通信實例

本例主要是將單片機串口發送的數據由HDSL7001芯片按照紅外傳輸的格式進行編碼,將編碼后的數據由HDSL3201芯片進行發送。HDSL3201芯片接收另一個紅外設備發送的數據,將接收到的紅外數據交給HDSL7001芯片進行解碼處理,解碼后的數據再傳給單片機。紅外通信電路如圖6-9所示。

圖6-9紅外通信電路

UART模塊初始化子函數:將UART初始化為波特率57600;數據位8位;無奇偶校驗;1位停止位。

voidInit_UART1(void)

{

U1CTL=CHAR+PEV+PENA; //8-bitcharacter

U1TCTL=SSEL1; //UCLK=MCLK

U1BR0=0x8B; //8MHz57600

U1BR1=0x00; //8MHz57600

U1MCTL=0x00; //8MHz57600modulation

ME2|=UTXE1+URXE1; //EnableUSART0TXD/RXD

IE2|=UTXIE1+URXIE1; //EnableUSART0RXTXinterrupt

P3SEL|=0x30; //P3.4,5=USART0TXD/RXD

P3DIR|=0x10; //P3.4outputdirection

return;

}

UART發送數據子函數:該函數是一中斷程序,在初始化時需將發送數據設置為中斷,當有數據需發送時,程序自動進入該子程序處理。

#pragmavector=USART1TX_VECTOR/*0xFFE4USART1Transmit*/

_interruptvoidusart1_tx_sever(void)

{

inti;

if(point!=0)

{//緩沖區中有數據待發送

U1TXBUF=UART1_TX_BUF[i];

i++;

if(i>point)

{

Point=0;

}

}

}

UART接收數據子函數:該函數是一中斷程序,在初始化時需將接收數據設置為中斷,當收到數據后,程序自動進入該子程序處理。

#pragmavector=USART1RX_VECTOR/*0xFFE6USART1Receive*/

_interruptvoidusart1_rx_sever(void)

{

inti;

i=U1RXBUF;

//該處處理接收的數據

}

6.4.1無線通信概述

無線通信應用非常廣泛,常用于極低功率UHF無線收發器、315/433/868和915MHzISM/SRD波段系統、AMR-自動儀表讀數、電子消費產品、RKE-兩路遠程無鍵登錄、低功率遙感勘測、住宅和建筑自動控制、無線警報和安全系統、工業監測和控制、無線傳感器網絡等。6.4無線通信

1.?CC1100無線通信芯片概述

CC1100是一種低成本、真正單片的UHFRF收發器,為低功耗無線應用而設計。該電路主要設定為315

MHz、433

MHz、868

MHz和915

MHz的ISM(工業、科學和醫學)和SRD(短距離設備)頻率波段,也可以容易地設置為300MHz~348MHz、400MHz~464MHz和800

MHz~928MHz的其他頻率。RF收發器集成了一個高度可配置的調制解調器。這個調制解調器支持不同的調制格式,其數據傳輸率可達500

kb/s。通過開啟集成在調制解調器上的前向誤差校正選項,能使性能得到提升。CC1100為數據包處理、數據緩沖、突發數據傳輸、清晰信道評估、連接質量指示和電磁波激發提供廣泛的硬件支持。CC1100的主要操作參數和64位傳輸/接收FIFO可通過SPI接口控制。在一個典型系統里,CC1100和一個微控制器及若干被動元件一起使用。

CC1100的主要特性如下:

(1)體積小(QLP4mm

×

4mm封裝,20引腳);

(2)真正單片的UHFRF收發器;

(3)頻率波段為300MHz~348MHz、400MHz~464MHz和800MHz~928MHz;

(4)高靈敏度(1.2kb/s下

-110dBm,1%數據包誤差率);

(5)可編程控制的數據傳輸率,可達500kb/s;

(6)較低的電流消耗(RX中15.6mA,2.4kb/s,433MHz);

(7)可編程控制的輸出功率,對所有的支持頻率可達

+10dBm;

(8)優秀的接收器選擇性和模塊化性能;

(9)極少的外部元件,芯片內頻率合成器,不需要外部濾波器或RF轉換;

(10)可編程控制的基帶調制解調器;

(11)理想的多路操作特性;

(12)可控的數據包處理硬件;

(13)快速頻率變動合成器帶來的合適的頻率跳躍系統;

(14)可選的帶交錯的前向誤差校正;

(15)單獨的64字節RX和TX數據FIFO;

(16)高效的SPI接口,所有的寄存器能用一個“突發”轉換器控制;

(17)數字RSSI輸出;

(18)與遵照EN300220(歐洲)和FCCCFR47Part15(美國)標準的系統相配;

(19)自動低功率RX拉電路的電磁波激活功能;

(20)許多強大的數字特征,使得使用廉價的微控制器就能得到高性能的RF系統;

(21)集成模擬溫度傳感器;

(22)自由引導的“綠色”數據包;

(23)對數據包導向系統的靈活支持,即對同步詞匯偵測的芯片支持,地址檢查,靈活的數據包長度及自動CRC處理;

(24)可編程信道濾波帶寬;

(25)

OOK和靈活的ASK整型支持;

(26)

2-FSK,GFSK和MSK支持;

(27)自動頻率補償可用來調整頻率合成器到接收中間頻率;

(28)對數據的可選自動白化處理;

(29)對現存通信協議的向后兼容的異步透明接收/傳輸模式的支持;

(30)可編程的載波感應指示器;

(31)可編程前導質量指示器及在隨機噪聲下改進的針對同步詞匯偵測的保護;

(32)支持傳輸前自動清理信道訪問(CCA),即載波偵聽系統;

(33)支持每個數據包連接質量指示。

2.?CC1100的引腳及功能說明

CC1100的引腳封裝圖如圖6-10所示,各引腳功能說明如下:

SCLK:數字輸入、連續配置接口、時鐘輸入。

SO(GDO1):數字輸出、連續配置接口、數據輸出,當CSn為高時為可選的一般輸

出腳。

GDO2:數字輸出,一般用途的數字輸出腳,用于:測試信號;FIFO狀態信號;時鐘輸出,從XOSC向下分割;連續輸入TX數據。

DVDD:功率(數字)、數字I/O和數字中心電壓調節器的1.8V~3.6V數字功率供給

輸出。

DCOUPL:功率(數字)、對退耦的1.6V~2.0V數字功率供給輸出。注意,這個引腳只對CC2500使用,不能用來對其他設備提供供給電壓。

GDO0(ATEST):數字I/O,一般用途的數字輸出腳,用于:測試信號;

FIFO狀態信號;時鐘輸出,從XOSC向下分割;連續輸入TX數據;原型/產品測試的模擬測試I/O。

CSn:數字輸入,連續配置接口,芯片選擇。

XOSC_Q1:模擬I/O,晶體振蕩器引腳1,或外部時鐘輸入。

AVDD:功率(模擬),1.8V~3.6V模擬功率供給連接。

XOSC_Q2:模擬I/O,晶體振蕩器引腳2。

RF_P:RFI/O,接收模式下對LNA的正RF輸入信號,發送模式下對LNA的正RF輸出信號。

圖6-10CC1100的引腳封裝圖

RF_N:RFI/O,接收模式下對LNA的負RF輸入信號,發送模式下對LNA的負RF輸出信號。

GND:地(模擬),模擬接地。

RBIAS:模擬I/O,參考電流的外部偏阻器。

DGUARD:功率(數字),對數字噪聲隔離的功率供給連接。

GND:地(數字),數字噪聲隔離的接地。

SI:數字輸入,連續配置接口,數據輸入。

CC1100簡化框圖如圖6-11所示。CC1100用作一個低IF接收器。接收的RF信號通過低噪聲放大器(LNA)放大,再對中間頻率(IF)求積分來向下轉換。在IF下,I/Q信號通過ADC被數字化。自動增益控制(AGC),細微頻率濾波和解調位/數據包同步均數字化地工作。CC1100的發送器部分基于RF頻率的直接合成。頻率合成器包含一個完整的芯片LCVCO,和一個對接收模式下的向下轉換混頻器產生1個QLO信號的90°相移裝置。將晶體振蕩器連接在XOSC_Q1和XOSC_Q2上。晶體振蕩器產生合成器的參考頻率,同時為數字部分和ADC提供時鐘。一個4線SPI串聯接口被用作配置和數據緩沖通路。數字基帶包括頻道配置支持,數據包處理及數據緩沖。

圖6-11CC1100簡化框圖對于多種不同的應用,CC1100能配置達到最優性能。配置通過SPI接口完成。關鍵參數設計如下:功率降低/提升模式;晶體振蕩器功率降低/提升;接收/傳輸模式;RF信道選擇;數據率;調制格式化;RX信道濾波器帶寬;RF輸出功率;64位傳輸FIFO數據緩沖;數據包通信硬件支持;交錯前向誤差校正;數據白化;電磁波激活(WOR)。

3.?CC1100配置說明

CC1100的配置通過程序控制8位寄存器完成。基于選擇的系統參數的配置數據大多能容易地通過SmartRFStudio軟件得到。寄存器的完整描述見表6-3。在芯片重啟之后,所有的寄存器設置為默認值。關于每個寄存器的具體說明可參考數據手冊。

表6-3CC1100配置寄存器

CC1100通過4線SPI兼容接口(SI,SO,SCLK和CSn)配置。這個接口同時用做寫和讀緩存數據。其寫和讀操作時序如圖6-12所示。SPI通信起始頭字節包含一個讀/寫位、一個突發訪問位和一個6位地址。在地址和數據轉換期間,CSn腳(芯片選擇,低電平有效)必須保持為低電平。如果在轉換過程中CSn變為高電平,則轉換取消。當CSn變低時,在開始轉換頭字節之前,MCU必須等待,直到SO腳變低。這表明電壓調制器已經穩定,晶體正在運作中。除非芯片處在SLEEP或XOFF狀態,SO腳在CSn變低之后總會立即變低。

圖6-12配置寄存器寫和讀操作當頭字節在SPI接口上被寫入時,芯片狀態字節在SO腳上被CC1100寫入。狀態字節包含關鍵狀態信號,對MCU是有用的。第一位S7,是CHIP_RDYn信號。在SCLK的第一個正邊緣之前,這個信號必須變低。CHIP_RDYn信號表明晶體正處于工作中,調節數字供給電壓是穩定的。第6,5和4位由狀態值組成。這個值反映了芯片的狀態。當使XOSC空閑并使數字中心的能量開啟時,所有其他模塊處于功率降低狀態。只有芯片處于此狀態時,頻率和信道配置才能被更新。當芯片處于接收模式時,RX狀態是活動的。同樣地,當芯片處于傳輸模式時,TX狀態是活動的。狀態字節中的后四位(3

:

0)包含FIFO_BYTES_AVAILABLE。為了進行讀操作,這個區域包含可從RXFIFO讀取的字節數。為了進行寫操作,這個區域包含可寫入TXFIFO的字節數。當FIFO_BYTES_AVAILABLE=15或者更多的字節時,是可用/自由的。

CC1100配置寄存器位于SPI地址從0x00到0x2F之間。所有的配置寄存器均能讀和寫。讀/寫位控制寄存器是讀或者寫。當對寄存器寫時,每當一個待寫入的數據字節傳輸到SI引腳時,狀態字節將被送至SO引腳。通過在地址頭設置突發位,連續地址的寄存器能高效地被訪問。這個地址在內部計數器內設置起始地址,每增加一個新的字節(每8個時鐘脈沖),計數器值增加1。突發訪問不管是讀訪問還是寫訪問,必須通過設置CSn為高來終止。

對0x30~0x3D間的地址來說,突發位用以在狀態寄存器和命令濾波之間選擇。狀態寄存器只讀。突發讀取對狀態寄存器是不可取的,故它們每次只能被讀一個。64字節TXFIFO和64字節RXFIFO通過0x3F被訪問。當讀/寫位為0時,TXFIFO被訪問,當讀/寫位為1時,RXFIFO被訪問。TXFIFO是只寫的,而RXFIFO是只讀的。突發位用來決定FIFO訪問是單字節訪問還是突發訪問。單字節訪問方式期望地址的突發位為0及1數據字節。在數據字節之后等待一個新的地址,因此,CSn繼續保持低。突發訪問方式允許一地址字節,然后是連續的數據字節,直到通過設置CSn為高來關斷訪問。當對TXFIFO寫時,狀態字節對每個SO引腳上的新數據字節是輸出量,如圖6-13所示。這個狀態位能用來偵測對TXFIFO寫數據時的下溢。注意,狀態字節包含在寫入字節到TXFIFO的過程前空閑的字節數。當最后一個適合TXFIFO的字節被傳送至SI引腳后,被SO引腳接收的狀態位會表明在TXFIFO中只有一個字節是空閑的。

圖6-13寄存器訪問類型傳輸FIFO可能會通過發布一個SFTX命令濾波而被淹沒。相似地,一個SFRX命令濾波會淹沒接收FIFO。當進入休眠狀態時,兩個FIFO都被清空。

0x3E地址用來訪問PATABLE。PATABLE用來選擇PA能量控制設置。在接收此地址之后,SPI等待至少8個字節。通過控制PATABLE,能實現可控的PA能量上升和下降,減少的帶寬的ASK調制整型也如此。

CC1100使用過程中需注意的設置較多,如微控制器接口和引腳結構、數據率設計、接收信道濾波帶寬、解調器、符號同步裝置和數據決定、數據包處理和硬件支持、調制格式化、已接收信號質量和連接質量信息、交錯前向誤差校正、通信控制、數據FIFO、頻率控制、VCO、電壓調節、輸出功率調節、晶體振蕩器、天線接口、常規用途/測試輸出控制引腳、異步和同步連續操作等。具體說明可參考CC1100數據手冊。6.4.2CC1100無線芯片控制子程序

預定義:定義通信端口。

#defineCC1100_SET BIT0 //P3.0

#defineCC1100_SIMO BIT1 //P3.1

#defineCC1100_SOMI BIT2 //P3.2

#defineCC1100_UCLK BIT3 //P3.3

#defineOUT_CC1100_SET P3DIR|=CC1100_SET

#defineHIGH_CC1100_SET P3OUT|=CC1100_SET

#defineLOW_CC1100_SET P3OUT&=~CC1100_SET

#defineMODULE_CC1100_SIMO P3SEL|=CC1100_SIMO

#defineMODULE_CC1100_SOMI P3SEL|=CC1100_SOMI

#defineMODULE_CC1100_UCLK P3SEL|=CC1100_UCLK

#defineMISO_LOW_WAIT() while(P3IN&CC1100_SOMI)

#defineMISO_HIGH_WAIT() while(!(P3IN&CC1100_SOMI))

//--------------------------------------------------------------------------------------------------

//Definitionstosupportburst/singleaccess:

#definewrite_burst0x40

#defineread_signle0x80

#defineread_burst0xC0

/*------------------ConfigurationRegistersOverview---------------------------------------*/

#defineIOCFG2 (0x00) //GDO2outputpinconfiguration

#defineIOCFG1 (0x01) //GDO1outputpinconfiguration

#defineIOCFG0 (0x02) //GDO0outputpinconfiguration

#defineFIFOTHR (0x03) //RXFIFOandTXFIFOthresholds

#defineSYNC1 (0x04) //Syncword,highbyte

#defineSYNC0 (0x05) //Syncword,lowbyte

#definePKTLEN (0x06) //Packetlength

#definePKTCTRL1 (0x07) //Packetautomationcontrol

#definePKTCTRL0 (0x08) //Packetautomationcontrol

#defineADDR (0x09) //Deviceaddress

#defineCHANNR (0x0A) //Channelnumber

#defineFSCTRL1 (0x0B) //Frequencysynthesizercontrol

#defineFSCTRL0 (0x0C) //Frequencysynthesizercontrol

#defineFREQ2 (0x0D) //Frequencycontrolword,highbyte

#defineFREQ1 (0x0E) //Frequencycontrolword,middlebyte

#defineFREQ0 (0x0F) //Frequencycontrolword,lowbyte

#defineMDMCFG4 (0x10) //Modemconfiguration

#defineMDMCFG3 (0x11) //Modemconfiguration

#defineMDMCFG2 (0x12) //Modemconfiguration

#defineMDMCFG1 (0x13) //Modemconfiguration

#defineMDMCFG0 (0x14) //Modemconfiguration

#defineDEVIATN (0x15) //Modemdeviationsetting

#defineMCSM2 (0x16) //MainRadioControlStateMachineconfiguration

#defineMCSM1 (0x17) //MainRadioControlStateMachineconfiguration

#defineMCSM0 (0x18) //MainRadioControlStateMachineconfiguration

#defineFOCCFG (0x19) //FrequencyOffsetCompensationconfiguration

#defineBSCFG (0x1A) //BitSynchronizationconfiguration

#defineAGCTRL2 (0x1B) //AGCcontrol

#defineAGCTRL1 (0x1C) //AGCcontrol

#defineAGCTRL0 (0x1D) //AGCcontrol

#defineWOREVT1 (0x1E) //HighbyteEvent0timeout

#defineWOREVT0 (0x1F) //LowbyteEvent0timeout

#defineWORCTRL (0x20) //WakeOnRadiocontrol

#defineFREND1 (0x21) //FrontendRXconfiguration

#defineFREND0 (0x22) //FrontendTXconfiguration

#defineFSCAL3 (0x23) //Frequencysynthesizercalibration

#defineFSCAL2 (0x24) //Frequencysynthesizercalibration

#defineFSCAL1 (0x25) //Frequencysynthesizercalibration

#defineFSCAL0 (0x26) //Frequencysynthesizercalibration

#defineRCCTRL1 (0x27) //RCoscillatorconfiguration

#defineRCCTRL0 (0x28) //RCoscillatorconfiguration

#defineFSTEST (0x29) //Frequencysynthesizercalibrationcontrol

#definePTEST (0x2A) //Productiontest

#defineAGCTEST (0x2B) //AGCtest

#defineTEST2 (0x2C) //Varioustestsettings

#defineTEST1 (0x2D) //Varioustestsettings

#defineTEST0 (0x2E) //Varioustestsettings

/*------------------CommandStrobes--------------------------------------------------------------------*/

#defineSRES (0x30) //Resetchip.

#defineSFSTXON (0x31) //Enableandcalibratefrequencysynthesizer

#defineSXOFF (0x32) //Turnoffcrystaloscillator.

#defineSCAL (0x33) //Calibratefrequencysynthesizerandturnitoff

#defineSRX (0x34) //EnableRX.Performcalibrationfirstifcomingfrom

//IDLEandMCSM0.FS_AUTOCAL=1.

#defineSTX (0x35) //InIDLEstate:EnableTX.

#defineSIDLE (0x36) //ExitRX/TX,turnofffrequencysynthesizerandexit

//Wake-On-Radiomodeifapplicable.

#defineSWOR (0x38) //StartautomaticRXpollingsequence(Wake-on-Radio)

//asdescribedinsection19.5.

#defineSPWD (0x39) //EnterpowerdownmodewhenCSngoeshigh.

#defineSFRX (0x3A) //FlushtheRXFIFObuffer.OnlyissueSFRXintheIDLE,

//TXFIFO_UNDERFLOWorRXFIFO_OVERFLOWstates.

#defineSFTX (0x3B) //FlushtheTXFIFObuffer.OnlyissueSFTXintheIDLE,

//TXFIFO_UNDERFLOWorRXFIFO_OVERFLOWstates.

#defineSWORRST (0x3C) //Resetrealtimeclock.

#defineSNOP (0x3D) //Nooperation.Maybeusedtopadstrobecommandsto

//twobytesforsimplersoftware.

/*------------------StatusRegistersOverview-----------------------------------------------------------*/

#definePARTNUM (0xF0) //PartnumberforCC1100

#defineVERSION (0xF1) //Currentversionnumber

#defineFREQEST (0xF2) //FrequencyOffsetEstimate

#defineLQI (0xF3) //DemodulatorestimateforLinkQuality

#defineRSSI (0xF4) //Receivedsignalstrengthindication

#defineMARCSTATE (0xF5) //Controlstatemachinestate

#defineWORTIME1 (0xF6) //HighbyteofWORtimer

#defineWORTIME0 (0xF7) //LowbyteofWORtimer

#definePKTSTATUS (0xF8) //CurrentGDOxstatusandpacketstatus

#defineVCO_VC_DAC (0xF9) //CurrentsettingfromPLLcalibrationmodule

#defineTXBYTES (0xFA) //UnderflowandnumberofbytesintheTXFIFO

#defineRXBYTES (0xFB) //OverflowandnumberofbytesintheRXFIFO

SPI端口初始化函數:在該程序中使用SPI內部模塊功能,如在某些場合下沒有SPI內部模塊,可自行編寫出通信協議。

voidInit_SPI(void)

{

IE1&=~(URXIE0+UTXIE0);

ME1|=USPIE0; //EnableUSART0SPImode

UTCTL0=CKPH+SSEL1+SSEL0+STC; //CKPL+SMCLK,3-pinmode

UCTL0=CHAR+SYNC+MM; //8-bitSPIMaster**SWRST**

UBR00=0x02; //UCLK/30

UBR10=0x00; //0

UMCTL0=0x00; //nomodulation

P3SEL|=CC1100_SIMO+CC1100_SOMI+CC1100_UCLK; //P3.1-3SPIoptionselect

P3DIR|=CC1100_SET+CC1100_SIMO+CC1100_UCLK; //P3.4P3.0outputdirection

}讀CC1100內部寄存器函數:讀出所需地址對應的數據,由于該函數使用單片機內部SPI模塊,因此不需要直接操作端口,只需控制模塊寄存器即可實現。該函數先向CC1100發送需讀寄存器標識

+

地址,并空操作一次,用于CC1100返回所讀寄存器數據。

入口參數:adress,需讀出寄存器地址。

返回參數:i,需讀出寄存器的值。

unsignedcharread_cc1100(unsignedcharaddress)

{

chari;

LOW_CC1100_SET;

MISO_LOW_WAIT();

while((IFG1&UTXIFG0)==0);

TXBUF0=read_signle+address;

while((IFG1&URXIFG0)==0);

i=U0RXBUF;

while((IFG1&UTXIFG0)==0);

TXBUF0=0x00;

while((IFG1&UTXIFG0)==0);

while((IFG1&URXIFG0)==0);

i=U0RXBUF;

HIGH_CC1100_SET;

return(i);

}

讀CC1100狀態函數:讀出相應地址寄存器的狀態,該函數先向CC1100發送需讀狀態寄存器的地址,并空操作一次,用于CC1100返回所讀寄存器狀態。

入口參數:adress,需讀出狀態寄存器地址。

返回參數:i,需讀出狀態寄存器的值。

unsignedcharread_cc1100_status(unsignedcharaddress)

{

chari;

LOW_CC1100_SET;

MISO_LOW_WAIT();

while((IFG1&UTXIFG0)==0);

TXBUF0=address;

while((IFG1&URXIFG0)==0);

i=U0RXBUF;

while((IFG1&UTXIFG0)==0);

TXBUF0=0x00;

while((IFG1&UTXIFG0)==0);

while((IFG1&URXIFG0)==0);

i=U0RXBUF;

HIGH_CC1100_SET;

return(i);

}

向CC1100寄存器寫入數值函數:該函數先向CC1100發送需寫寄存器的地址,接著發送需寫入的數據。

入口參數:adress,需寫入寄存器地址。

返回參數:data,需寫入的值。

voidwrite_cc1100(charaddress,chardata)

{

chari;

LOW_CC1100_SET;

MISO_LOW_WAIT();

while((IFG1&UTXIFG0)==0);

TXBUF0=address;

while((IFG1&URXIFG0)==0);

i=U0RXBUF;

while((IFG1&UTXIFG0)==0);

TXBUF0=data;

while((IFG1&UTXIFG0)==0);

while((IFG1&URXIFG0)==0);

i=U0RXBUF;

HIGH_CC1100_SET;

}

CC1100功率控制函數:用于控制CC1100輸出功率的大小。不同輸出功率的傳輸距離和所耗電量不同,應根據實際需要寫入所需功率大小。具體不同數據代表的功率可參考數據手冊。

入口參數:data,功率參數。

voidwrite_cc1100_PATABLE(chardata)

{

chari;

LOW_CC1100_SET;

MISO_LOW_WAIT();

while((IFG1&UTXIFG0)==0);

TXBUF0=write_burst+0x3e;

while((IFG1&UTXIFG0)==0);

TXBUF0=data;

while((IFG1&UTXIFG0)==0);

TXBUF0=0;

while((IFG1&UTXIFG0)==0);

i=U0RXBUF;

while((IFG1&URXIFG0)==0);

HIGH_CC1100_SET;

}向CC1100寫入需發送的數值函數:向CC1100寫入需無線傳輸的數據。該函數中tx_buffer[0]存儲的是需發送數據的數據包大小,并根據該數據發送tx_buffer[]中的數據。需注意CC1100一次最多發送64字節的數據包文件,大于該數值需分開發送。

voidwrite_cc1100_tx(void)

{

unsignedchari,k;

if(tx_buffer[0]==0){return;}

LOW_CC1100_SET;

MISO_LOW_WAIT();

while((IFG1&UTXIFG0)==0);

TXBUF0=write_burst+0x3f;

for(i=0;i<tx_buffer[0]+1;i++)

{

while((IFG1&UTXIFG0)==0);

TXBUF0=tx_buffer[i];

while((IFG1&URXIFG0)==0);

k=U0RXBUF;

}

while((IFG1&UTXIFG0)==0);

P3OUT|=SET;

write_cc1100_command(STX);

delay_ms(8);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論