這是人生第一次寫embedded system,從4月份開始porting,到8月份第一階段底層porting結束
9月~11月份是第二階段uart,GPIO,ADC porting 結束
雖然時間花了7個月之久,但真正porting的時間不到3個月,因為平常要寫報告,跑業務,還要處理雜事
一週大約只有1,2天可以寫code和找資料
對一個新人進入embedded system而言,我給自已打80分,讓自已還有20分的進步空間
當時,聽到自已要寫embedded system從排斥到接受,心裡也猶豫很久
這對我而言是一個全新的領域
客戶拿來的board是一個客製化的board,所有線路都已經和原先不同
am335x demo board分成daughter board and main board兩個board組合而成
但我們的customized board只有一個小小的board,是12cm x12 cm
在第一階段porting 就遇到很多的問題
EEPROM找不到相hardware configuration,所以去board-am335xevm.c將有關EEPROM的code comment out且寫code去找出version board_name等相關的資訊,再一一填入
總算可以進入kernel,此時卻出現mmcblkop2的error
原來,我們是用micorsd card,但系統是用sd card,所以他會去check write-protect,所以要去找這個code在哪,去修改完畢就可以用mount filesystem
這時候可以順利進入filesystem,卻進入到safe mode
這又是因為我們的lcd pin mux有修改過,所以只要修改pin_mux定義就可以解決問題
此時進入android,發現R and B兩個顏色卻 changed,因為demo board是用32 bit,我們是用16 bit
所以又要去改code,將R,B兩個顏色互 change
在ethernet的部份,原本的demo board是走gmii
customized board是走mii,所以只要修改pin_mux就可以解決
進入到android system,卻開始系統不穩定,無緣無故當機
原來我們的ddr2的size忘了調整,demo board是256M,但我們的customized board是128M,
所以改成128M就ok
這時候卻遇到最大的問題就是影音無法play
因為i2c有修改過,所以開始研究i2c ,mcasp0,and video的相關code
最後修改了好幾個地方,總算video and audio可以同步play
大概有一半的時間都在改這邊的code
最後就是定義volume up and down的pin mux
到這,底層的porting已經完成
----------------------------------------------------------------------------------------------------------------
現在開始進入第二階段的目標去控制gpio,uart, adc
如果是要在kernel space 寫gpio and uart controller就很簡單
因為我們有特別的需求,需要將讀到的資料存在filesystem,讓androind能夠去讀取,並顯示在android UI
故需要寫在user space,這就變得很複雜
uart and gpio的pin腳已經定義好
接下來是要寫controller code
這邊才是我花了很多時間去寫code
原本一開始想寫在kernel space,由於filesystem尚未mount, 所以kernel是無法做讀取的動作
因此才改寫在filesystem,可是filesystem竟然無法直接用timer function,就只好用sleep去取代
經過長時間的努力只剩下adc
ADC在am335x有分兩種mode,one-shot and continuous
其中one-shot是屬於被動模式,比較適合我們目前的狀況,每10秒就去讀一次adc
而continuous則是屬於主動模式,會一直讀取ADC,但我們不需要這麼做,就不用continuous
最後,也mount gprs的modulus,這兩天來將硬體mount之後,看結果如何吧!!
辛苦這麼久,成果也逐漸出現
這是很開心的一件事
留言列表