天天看點

為BBB制作專屬自己的cape(四)

強勢歸來!

在本系列的(一)到(三)中,我嘗試在Beaglebone Black上使用MCU接口的LCD子產品,因為驅動問題一直沒成功,最近我使用RGB接口的LCD子產品,參考官方LCD cape的資料自己畫闆子焊晶片,終于成功了。本文記錄一下制作過程和我犯錯誤的一些地方。

首先強調一下LCD的類型選擇。本部落格之前轉發過一篇博文可以參考,但這裡還是要着重說一下MCU接口(也叫80接口)和RGB接口的LCD的差別。如果你也想從淘寶買LCD來為BBB自制螢幕,需要注意不要買宣稱的“單片機可驅動”或者“可以用單片機控制”這類LCD,即MCU接口的LCD。它們内置了LCD控制器,需要按照不同控制器的要求輸入相應指令來操控LCD。我們的BBB所用的AM3359晶片裡面已經有LCD控制器了,是以我們隻要買RGB接口,或稱“裸的”LCD螢幕即可。另外淘寶上常見的RGB接口的螢幕,最小的也得4.3英寸。如果你想買更小的,可能得花更多的錢買進口的了。

需要準備的東西

一塊RGB接口的4.3英寸LCD螢幕(約60元)

印刷PCB闆(50元)

購買晶片、阻容和接插件(約50元)

總成本約160元。

如果購買官方LCD4 cape的話,稅前價格是¥631.54。是以自制一塊還是非常超值的!

電路原理圖和PCB設計

官方已經開源,可以到這裡下載下傳http://elinux.org/CircuitCo:BeagleBone_LCD4

如果願意的話,可以直接拿它的PCB設計圖去印PCB闆。但是它用到了一個BGA封裝的晶片74AVC32T245,不利于手工焊接,是以我用了同系列的另一個SOP封裝的74AVC20T245代替它。原理圖變了,就得自己進行PCB布線了。

我用的4寸LCD接口是40pin的,跟上面這個官方cape的LCD接口一樣。大多數廠商生産的40pin RGB接口LCD都能通用的,不必買官方使用的那個屏。

關于接口簡單說兩點:一是第31個引腳DISEN是LCD顯示使能腳,高電平使能。官方電路圖中把它接到了BBB的一個IO口上,你也可以把它接到一個開關上。 二是40pin的顯示屏都是支援24位色的,RGB各占8個引腳, 但BBB的lcd引腳有一些被eMMC占用了,除非你的系統裝在micro SD卡上,可以禁用eMMC,否則就隻能使用16位顯示了,就像官方電路圖中那樣。沒有被eMMC占用,可以使用24位。但下面以16位來介紹。

關于緩沖晶片74AVC20T245。從這個晶片的datasheet裡看不出這個晶片有啥用,看起來就是把輸入信号原樣輸出了。實際上這個晶片的作用在于,BBB的lcd引腳有一些是在系統啟動中被使用的,如果直接把它們接到LCD上,系統就啟動不起來了。這個緩沖晶片起到了隔離作用。

關于EEPROM電路請參考本系列的第(一)篇文章。這裡提示一點,如果你按照官方cape的原理圖做出來發現eeprom寫不進東西,是因為你沒有把WP(寫保護)引腳拉低。官方原理圖在這裡有一個test point,寫入内容時把它接地,寫完以後去掉接地就能防止再次寫入了。當然如果你像我一樣圖省事,或者不确定今後會不會随時修改eeprom内容,那把WP引腳懸空就行了。

關于5V供電。如果你用USB連接配接電腦來供電,那麼要使用BBB上的SYS_5V(P9.7, P9.8)作為5V電源,如果使用外接5V電源供電,就要使用BBB上的VDD_5V(P9.5, P9.6)。額外說一句,如果要用電池給BBB供電,應該把穩壓後的5V電供到VDD_5V接口上。

注意電感和電容的封裝類型。特别是背光電路裡的電感,是要在升壓電路中儲能的,不能用普通電感。

這裡最難手工焊接的應該就是升壓晶片TPS61080了,是QFN封裝的。可以到網上搜一下焊接技巧。我的建議是首先要配備一個好用的烙鐵。

官方原理圖中有大量元件被标記為“DNI”,是do not install的意思,主要是測試用的,如果你隻是想做一個可以使用的LCD屏,那麼抄電路原理圖的時候忽略所有的标有DNI的元件就可以了。讀圖的時候同樣要忽略掉它們來了解電路。

EEPROM的讀寫

cape的EEPROM必須連接配接到I2C2_SCL和I2C2_SDA引腳上才能在啟動時被識别(在系統中看到的是i2c-1)。下面先介紹如何進行讀寫,再介紹該寫入什麼東西。

首先确定eeprom的位址,由A0,A1,A2三個引腳的電平确定,請參考本系列文章(一)。比如我把A0,A1接地,A2拉高,位址就是0x54。

$ cd /sys/bus/i2c/devices/1-0054/  #到eeprom目錄中
$ cat eeprom | hexdump -C  #讀取eeprom内容并以字元形式顯示
$ echo -e "\xaa\x55\x33\xeeA1Beaglebone LCD4 Cape\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0000A1BeagleboardToys\x00BB-BONE-LCD4-01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" > eeprom  #寫入内容
$ cat eeprom | hexdump -C  #确認是否寫入成功
           

其中\x開頭的字元代表按ASCII碼值寫入。 寫入内容時,要按照SRM裡的标準(如下圖),最重要的是要把頭6個位元組\xaa\x55\x33\xeeA1以及後面的版本号00A1和要調用的dtbo檔案名BB-BONE-LCD4-01寫對,其他的比如Board Name、Number of Pins什麼的都無所謂。空餘的地方必須用\x00補全,用其他字元會産生錯誤。

為BBB制作專屬自己的cape(四)

大功告成!

因為用的是官方現成的驅動、現成的dtbo檔案,是以我們省了很多事,隻要向eeprom中寫入正确的内容,就能“騙”過系統,讓它“誤以為”我插到BBB上的是官方的LCD cape^^。總之至此已經成功DIY了自己的LCD cape。 使用方法是先把cape插到BBB上,再為BBB供電,系統啟動時會自動檢測eeprom的内容,然後加載的BB-BONE-LCD4-01-00A1.dtbo檔案并配置相應的驅動程式,稍等一會就會在顯示屏上出現Beagleboard的logo。登入之後就能看到linux桌面了。觸摸屏如果不好用的話(可能會有點漂),在usb上連接配接滑鼠也是可以直接用的。

為BBB制作專屬自己的cape(四)

補充

我在制作過程中被卡住兩次,簡單補充一下我的解決過程,以便有人遇到同樣問題被卡可以參考。

第一次是升壓晶片焊接的問題。QFN封裝的晶片不容易用眼睛确認是否有虛焊或短路,隻能用其輸出的表現來判斷。 短路檢測用萬用表就行。需要注意的是這裡LED-引腳用了一個2歐姆電阻接地,這點電阻在萬用表看來是短路的,别被它誤導了。 虛焊的話最直接的表現就是輸出電壓不夠,LED+和LED-之間應該輸出一個20多V的電壓才對。

第二次被卡是忘記把前面說的DISEN引腳拉高,導緻背光很正常,但螢幕一片白,什麼也沒有。 我想說的是,如果你遇到類似問題,用fbset指令測試,輸出是

mode "480x272-0"
	# D: 0.000 MHz, H: 0.000 kHz, V: 0.000 Hz
	geometry 480 272 480 272 16
	timings 0 0 0 0 0 0 0
	accel true
	rgba 5/11,6/5,5/0,0/0
endmode
           

裡面頻率都是0,這不代表驅動有問題,我的顯示屏正常工作時還是這樣。

如果你dmesg了一下,發現有如下輸出

tilcdc 4830e000.fb: timeout waiting for framedone
           

同樣不代表驅動有問題。

如果螢幕能亮,但是沒有内容顯示,首先可以檢測背光驅動是否正常。方法是

$ cd /sys/devices/ocp.2/backlight.10/backlight/backlight.10
$ echo 10 > brightness
$ echo 100 > brightness
           

如果背光亮度變了,說明背光驅動工作正常。

檢測驅動是否正常工作的另一個辦法是用示波器。一般實驗室的數字示波器都是100MHz的,顯示屏的時鐘是9MHz,如果直接檢測的話,方波會畸變成三角波。這時記得把示波器搖桿上的x10開關打開。

如果你的eeprom電路設計錯了,或者沒有eeprom,那也可以測試LCD。首先要通過修改uEnv.txt禁用HDMI的自動啟動(參考本系列之(二)),在系統啟動完畢以後用

$ echo BB-BONE-LCD4-01 > /sys/devices/bone_capemgr.*/slots
           

的辦法手動加載cape,如果LCD正常的話,會顯示出與序列槽連接配接BBB一樣的Angstrom logo和登入界面,等待你輸入使用者名和密碼。

思路拓展:有時候我們想得到一個PWM輸出(比如控制電機、舵機),但又沒有合适的驅動,不妨使用LCD背光驅動試試。

為BBB制作專屬自己的cape(四)
為BBB制作專屬自己的cape(四)

下圖是在測試背光。螢幕應該是白色的,角度原因照片裡成了藍色。。

為BBB制作專屬自己的cape(四)

繼續閱讀