树莓派 SPI,I2C,UART串行总线介绍
很多人對總線,串行等概念不熟悉特別是SPI,I2C,UART,GPIO等概念。
因此我收集了一些資料,用于總結。希望對大家有所幫助。
首先看一下樹莓派上的接口:
-
GPIO引腳 x 26
-
UART總線 x 1
-
SPI總線 x 1
-
I2C總線 x 1
-
5V x 2
-
3.3V x 2
-
GND x 8
那么什么是GPIO???
??? 首先應該理解什么是GPIO。GPIO,英文全稱為General-Purpose IO ports,也就是通用IO口。在嵌入式系統中經常有數量眾多,可是結構卻比較簡單的外部設備/電路,對這些設備/電路有的須要CPU為之提供控制手段,有的則須要被CPU用作輸入信號。并且,很多這種設備/電路僅僅要求一位,即僅僅要有開/關兩種狀態就夠了,比方燈亮與滅。對這些設備/電路的控制,使用傳統的串行口或并行口都不合適。所以在微控制器芯片上一般都會提供一個“通用可編程IO接口”,即GPIO。接口至少有兩個寄存器,即“通用IO控制寄存器”與“通用IO數據寄存器”。數據寄存器的各位都直接引到芯片外部,而對數據寄存器中每一位的作用,即每一位的信號流通方向時輸入還是輸出,則能夠通過控制寄存器中相應位獨立的加以設置。這樣,有無GPIO接口也就成為微控制器差別于微處理器的一個特征。
??? 在實際的MCU中,GPIO是有多種形式的。比方,有的數據寄存器能夠依照位尋址,有些卻不能依照位尋址,這在編程時就要區分了。比方傳統的8051系列,就區分成可位尋址和不可位尋址兩種寄存器。另外,為了使用的方便,非常多mcu把glue logic等集成到芯片內部,增強了系統的穩定性能,比方GPIO接口除去兩個標準寄存器必須具備外,還提供上拉寄存器,能夠設置IO的輸出模式是高阻,還是帶上拉的電平輸出,或者不帶上拉的電平輸出。這在電路設計中,外圍電路就能夠簡化不少。
??? 明確了這個道理,不同的MCU,提供的GPIO口的數目不同,可選擇的glue logic也不同。所以,在了解共性的基礎上去了解個性。
??? 另外須要注意的是,對于不同的計算機體系結構,設備可能是port映射,也可能是內存映射的。假設系統結構支持獨立的IO地址空間,而且是port映射,就必須使用匯編語言完畢實際對設備的控制,由于C語言并沒有提供真正的“port”的概念。假設是內存映射,那就方便的多了。舉個樣例,比方像寄存器A(地址假定為0x48000000)寫入數據0x01,那么就能夠這樣設置了。
通俗一點來說:GPIO(GeneralPurposeI/OPorts)意思為通用輸入/輸出端口,通俗地說,就是一些引腳,可以通過它們輸出高低電平或者通過它們讀入引腳的狀態-是高電平或是低電平。GPIO是個比較重要的概念,用戶可以通過GPIO口和硬件進行數據交互(如UART),控制硬件工作(如LED、蜂鳴器等),讀取硬件的工作狀態信號(如中斷信號)等。GPIO口的使用非常廣泛。掌握了GPIO,差不多相當于掌握了操作硬件的能力。
?
當定義為模塊管腳時,PIN起模塊中定義的功能。比如定義成SPI模塊的管腳,那就按照具體芯片的規定,或者定義成MOSI,或者定義成MISO,或者定義成SCLK,這些不是任意的。SPI是模塊,MISO等是功能管腳。
當定義成GPIO時,可以定義成高阻,輸入,或者輸出。這時候,就可以用作操作控制位,點LED燈等功能了。
?
總線:
單片機總線是一種內部結構,它是cpu、內存、輸入、輸出公用通道,主機的各個部件通過總線相連接,外部設備通過相應的接口電路再與總線相連接。
總線就是一個公共的計算機的連接線 所有外圍設備 都可以通過它與計算機相連接 是信息傳遞的通道 在它上面可以掛很多個外設元件。
?
單片機的總線是和微機原理的總線一樣的。平時我們直接用它的4個口,但是如果設備數目比較多,尤其是連接外部ram和rom時候,就需要做譯碼電路。
這時候,你就需要數據總線,地址總線,控制總線。
一個電路總是由元器件通過電線連接而成的,在模擬電路中,連線并不成為一個問題,因為各器件間一般是串行關系。各器件之間的連線并不很多,但計算機電路卻不一樣,它是以微處理器為核心,各器件都要與微處理器相連,各器件之間的工作必須相互協調,所以就需要的連線就很多了。
如果仍如同模擬電路一樣,在各微處理器和各器件間單獨連線,則線的數量將多得驚人,所以在微處理機中引入了總線的概念,各個器件共同享用連線,所有器件的8根數據線全部接到8根公用的線上,即相當于各個器件并聯起來。
但僅這樣還不行,如果有兩個器件同時送出數據,一個為0,一個為1,那么,接收方接收到的究竟是什么呢?這種情況是不允許的,所以要通過控制線進行控制,使器件分時工作,任何時候只能有一個器件發送數據(可以有多個器件同時接收)。
器件的數據線也就被稱為數據總線,器件所有的控制線被稱為控制總線。在單片機內部或者外部存儲器及其它器件中有存儲單元,這些存儲單元要被分配地址,才能使用,分配地址當然也是以電信號的形式給出的,由于存儲單元比較多,所以,用于地址分配的線也較多,這些線被稱為地址總線。
?
總線的種類很多:
如芯片級的總線 如 SPI,I2C,單總線 近距離進行CPU與其它外圍芯片的連接,他們多是采用串行方式傳送 數據的 即一位一位傳送數據 可以節省傳送線的條數
?
-
SPI 需要3條線: 一條時鐘線 一條數據接收線 一條數據發送線
-
I2C 需要2跳線 一條時鐘線 一條 數據線
-
單總線 即是用一條數據線來通訊 如DS18B20數字溫度傳感器
-
還有RS-232 用于計算機和計算機或單片機進行數據通訊的
-
還有RS-485 、CAN等工業現場總線 用于遠距離通訊 距離可達1000米。
SPI
SPI,是英語Serial Peripheral interface的縮寫,顧名思義就是串行外圍設備接口。是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應用在 EEPROM,FLASH,實時時鐘,AD轉換器,還有數字信號處理器和數字信號解碼器之間。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節約了芯片的管腳,同時為PCB的布局上節省空間,提供方便,正是出于這種簡單易用的特性,現在越來越多的芯片集成了這種通信協議,比如AT91RM9200. SPI總線系統是一種同步串行外設接口,它可以使MCU與各種外圍設備以串行方式進行通信以交換信息。外圍設置FLASHRAM、網絡控制器、LCD顯示驅動器、A/D轉換器和MCU等。SPI總線系統可直接與各個廠家生產的多種標準外圍器件直接接口,該接口一般使用4條線:串行時鐘線(SCK)、主機輸入/從機輸出數據線MISO、主機輸出/從機輸入數據線MOST和低電平有效的從機選擇線SS(有的 SPI接口芯片帶有中斷信號線INT或INT、有的SPI接口芯片沒有主機輸出/從機輸入數據線MOSI)。
?
I2C (Inter-Integrated Circuit):由PHILIPS公司開發的兩線式串行總線,用于連接微控制器及其外圍設備。
I2C總線用兩條線(SDA和SCL)在總線和裝置之間傳遞信息,在微控制器和外部設備之間進行串行通訊或在主設備和從設備之間的雙向數據傳送。I2C是OD輸出的,大部分I2C都是2線的(時鐘和數據),一般用來傳輸控制信號。
?
I2C是多主控總線,所以任何一個設備都能像主控器一樣工作,并控制總線。總線上每一個設備都有一個獨一無二的地址,根據設備它們自己的能力,它們可以作為發射器或接收器工作。多路微控制器能在同一個I2C總線上共存。
?
SPI、I2C和UART做個比較
?? ?SPI 和I2C這兩種通信方式都是短距離的,芯片和芯片之間或者其他元器件如傳感器和芯片之間的通信。SPI和IIC是板上通信,IIC有時也會做板間通信,不過距離甚短,不過超過一米,例如一些觸摸屏,手機液晶屏那些薄膜排線很多用IIC,I2C能用于替代標準的并行總線,能連接的各種集成電路和功能模塊。I2C是多主控總線,所以任何一個設備都能像主控器一樣工作,并控制總線。總線上每一個設備都有一個獨一無二的地址,根據設備它們自己的能力,它們可以作為發射器或接收器工作。多路微控制器能在同一個I2C總線上共存這兩種線屬于低速傳輸。
UART是應用于兩個設備之間的通信,如用單片機做好的設備和計算機的通信。這樣的通信可以做長距離的。UART速度比上面兩者者快,最高達100K左右,用與計算機與設備或者計算機和計算之間通信,但有效范圍不會很長,約10米左右,UART優點是支持面廣,程序設計結構很簡單,隨著USB的發展,UART也逐漸走向下坡。
GPIO (General Purpose Input Output 通用輸入/輸出)或總線擴展器,利用工業標準I2C、SMBus或SPI接口簡化了I/O口的擴展。
當微控制器或芯片組沒有足夠的I/O端口,或當系統 需要采用遠端串行通信或控制時,GPIO產品能夠提供額外的控制和監視功能。每個GPIO端口可通過軟件分別配置成輸入或輸出。Maxim的GPIO產品線包括8端口至28端口的GPIO,提供推挽式輸出或漏極開路輸出。提供微型3mm x 3mm QFN封裝。
?
GPIO的優點(端口擴展器):
低功耗:GPIO具有更低的功率損耗(大約1μA,μC的工作電流則為100μA)。
集成IIC從機接口:GPIO內置IIC從機接口,即使在待機模式下也能夠全速工作。
小封裝:GPIO器件提供最小的封裝尺寸 ― 3mm x 3mm QFN!
低成本:您不用為沒有使用的功能買單!
快速上市:不需要編寫額外的代碼、文檔,不需要任何維護工作!
靈活的燈光控制:內置多路高分辨率的PWM輸出。
可預先確定響應時間:縮短或確定外部事件與中斷之間的響應時間。
更好的燈光效果:匹配的電流輸出確保均勻的顯示亮度。
布線簡單:僅需使用2條IIC總線或3條SPI總線
IO端口和IO內存的區別及分別使用的函數接口?
?????????每個外設都是通過讀寫其寄存器來控制的。外設寄存器也稱為I/O端口,通常包括:控制寄存器、狀態寄存器和數據寄存器三大類。根據訪問外設寄存器的不同方式,可以把CPU分成兩大類。一類CPU(如M68K,Power PC等)把這些寄存器看作內存的一部分,寄存器參與內存統一編址,訪問寄存器就通過訪問一般的內存指令進行,所以,這種CPU沒有專門用于設備I/O的指令。這就是所謂的“I/O內存”方式。另一類CPU(典型的如X86),將外設的寄存器看成一個獨立的地址空間,所以訪問內存的指令不能用來訪問這些寄存器,而要為對外設寄存器的讀/寫設置專用指令,如IN和OUT指令。這就是所謂的“?I/O端口”方式。但是,用于I/O指令的“地址空間”相對來說是很小的,如x86 CPU的I/O空間就只有64KB(0-0xffff)。
????????結合下圖,我們徹底講述IO端口和IO內存以及內存之間的關系。主存16M字節的SDRAM,外設是個視頻采集卡,上面有16M字節的SDRAM作為緩沖區。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
總結
以上是生活随笔為你收集整理的树莓派 SPI,I2C,UART串行总线介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: #谷歌地图# 谷歌地图报错
- 下一篇: WINDOWS 系统错误代码