操作乙個裝置

2021-06-12 07:44:06 字數 2532 閱讀 2855

操作乙個裝置

**********==

無論有沒有作業系統,無論目標平台如何,控制乙個外部裝置的具體步驟都是一樣的。它始終包括如下步驟

迎合裝置電平特性

---------------

要使用乙個裝置首先要讓裝置得到它想要的。

首先就是給裝置供電。供電從來都不是一件輕輕鬆鬆的事情。

-->交流或直流:對於裝置的工作電壓可能是交流或直流,或同時都有,比如乙個數控的交流電風扇,需要交流電

提供電機轉動,需要乙個繼電器以控制其開關,繼電器是直流的。

-->正電壓或負電壓:某些傳輸晶元,如rs232協議的正邏輯就是-12v,負邏輯就是+12v。某些器件如數字放大

器,也許要負電壓才能放大到負電壓。這往往需要系統提供負電源(電源轉換晶元提供)

-->模擬/數字:對於數字晶元可能會同時有數字電壓和模擬電壓,數字電壓確定其邏輯電平或者控制其數字部分,

模擬電壓負責其模擬部分或者成為晶元的主電源,比如一塊無線接收晶元,模擬部分處理無線訊號,數字部分

也參與部分處理並且和外部通訊。

-->電源特性:乙個器件有一定的電壓工作範圍,比如5v邏輯的8051微控制器在4.3v的時候還是工作的好好的,又

比如一塊ad轉換晶元獲得的參考電壓可以在多個大概的電壓點變化,如2.5v,5v。各種器件對電壓的穩定度

要求也不一樣,在ad轉換中,參考電壓越穩定,轉換精度就越符合預期(理論上轉換精度是由ad的位寬決定的)

,51微控制器雖然工作電壓不一定要標準的5v,但是需要接乙個濾波電容和去耦電容來加強電源的穩定性和去

紋波。另外複雜的晶元需要對多個引腳進行供電,乙個複雜的嵌入式處理器有多個vcc,gnd。

-->功耗和散熱:不要小看這個問題,君不見筆記本i5+獨顯還不即台式上面乙個單i3?不同的裝置又不同的功耗,

可大可小,功耗高除了本身對電源功率的要求以外還產生了兩個問題:電流,散熱。一般電流越大佈線就要

越寬,否則線路也要燒掉;散熱不是問題,問題是散熱的器件的選擇,裝置的m密集度要調小。不解決功耗問題

整個系統都無法正常執行。

-->節能問題:不使用的裝置要斷開電源或睡眠,處理器也要睡眠。這就涉及到中斷相應的問題。

給裝置供電之後才是檢視其引腳的電氣特性。以下每一點都是可以用乙個重要的知識點,所以很簡略。

-->上/下拉電阻:上/下拉電阻的特性之一就是讓0更接近於0v,1更接近於vdd。

-->電壓相容:有的3.3v器件的引腳也相容5v電平,有的則不行,那麼穩定起見就需要接電壓轉換電路或晶元。

-->匹配電路:長距離的通訊會受傳輸線的限制,需要接匹配電路。

-->防止干擾:在高速訊號傳輸和遠距離訊號傳輸中都需要考慮干擾問題。高速訊號線的資料線必須一樣長,避免

其他訊號的時鐘線平行。遠距離傳輸時用差分方法,然後使用雙絞線是常用的抗共模干擾的方法。

硬體通訊協議

------------

處理器要控制外部裝置需要在硬體上匹配裝置的通訊協議。比較出名的協議有i2c,spi,uart,can,usb,還有

和外部儲存器相連的8,16,32位並行資料的協議(不知到有沒有名字)以及乙個引腳的pwm和高低電平的控制。

這些協議網上資料一大片,它們的協議流程各不相同,不過可能有一些共同的地方需要設定。

-->時鐘速率:不同的器件所支援的時鐘速率是不同的,i2c大致分標準速率(100kbps)和高速模式(150kps)

兩種,很多器件只支援標準的速率。uart也分不同的波特率,不同器件的差距就更大了。使用pwm來調節的裝置

也是一樣,不同的裝置需要不同的pwm基準頻率,頻率不匹配達到的效果你都想笑。

-->資料取樣邊沿:同樣是spi相容的ad晶元,它的資料有效邊沿可能不太一樣,可能在上公升沿,可能在下降沿。

-->訊號有效極性:同步訊號的極性,如pwm是高電平算「有效」還是低電平,lcd的幀同步訊號是高電平還是

低電平。

裝置的規則

-----------

有一些簡單的裝置如led,受pwm調節的背光,sram,da的直通模式等等,在和它們進行通訊時都不需要有什麼

多餘操作,led直接高低電平控制亮滅,sram直接讀取對應位址的位元組或字。但其他裝置可能就需要多一點的

約定,比如,溫度取樣晶元可能是基於命令控制的,不同的命令之後資料的傳輸方向不同,可能命令之後又要寫  

位址...這就構成了裝置的規則,裝置的規則幾乎是不可違背的,一旦違背那肯定不是你想要的結果。這個沒什麼

好說的,只是具體的裝置都不會太標新立異,各個型別的裝置操作流程幾乎都是大同小異的。像儲存類的裝置無非

就是寫命令-寫位址-讀寫資料-結束標誌。

使用作業系統  

------------

軟體程式設計的基本思想之一就是:統一方法,遮蔽細節,實現與介面分離。作業系統對於裝置的操作能更好的做到這

點。不得不說的是為什麼要使用linux作業系統,因為正是作業系統才遮蔽了那麼多裝置的實現細節。還是拿儲存裝置

來說,不管裝置是基於什麼硬體協議,不管訪問裝置需要遵循何種約定在linux使用者程式眼中它們幾乎都是檔案,

只有乙個規則--linux檔案訪問介面函式的規則。而作為驅動程式就顯得光榮了很多,和作業系統一起遮蔽細節。

android mtk 建乙個裝置misc

alps mediatek kernel drivers makefile 加一行 obj y emd ctl obj y scandriver obj y hello alps mediatek kernel drivers scandriver makefile 加一行 obj y demo1....

mknod 建立乙個裝置檔案

mknod 建立乙個裝置檔案 mknod option name type major minor mknod 選項 名稱 型別 主裝置號 次裝置號 引數 m mode 例如 mknod mydev c 66 0 建立乙個裝置檔案型別為c名稱為mydev 主裝置號為66次裝置號為0 裝置檔案 b 按...

快速操作乙個list

取出list物件中的某個屬性,放在另乙個list中 把list中的資料轉為字串,用,號分隔 long userarray long convertutils.convert userids.split long.class 獲取單個 dbdictionary dictionary list.stre...