最近的幾個月裡,都在從事軟硬體間的程式設計,雖然我懂得不多,但是經過一段時間的摸索之後也找到了一些解決問題的方法。雖然從前的我,只會寫軟體程式,也從來沒有想到我會接觸到這個領域的東西,但是經過這幾個月的努力終於有了一些小小的收穫。

我記得在這幾個月裡接觸了不少硬體的東西,ARM 9的平台、8051的系統還有一些單晶片的MCU,我也到處向人請教,四處要求協助,最遠曾跑到台南去向技術人請教硬體的設定。我真佩服那些硬體的專業人員,面對複雜的線路圖還能處變不驚,一條一條的理出頭緒,他們看著線路圖就能檢查出版子到底出了什麼問題,他們量著板子上的訊號就能知道目前的運作狀態。我現在也嘗試著利用儀器去了解目前開發板到底發生了什麼問題,去查出到底是什麼原因讓機器無法正常運作。進一步,我現在稍稍學會了看著線路圖上的訊號去撰寫程式,我現在已經會控制簡單的GPIO訊號,並且了解其中的對應關係。
 
目前我的硬體實驗平台是在S3C2440的開發環境,在往後的幾篇文章中,我會對我如何在這個平台上進行開發做詳細的介紹。這個平台上面是使用ARM 9的處理器,這個處理器的時脈最快可以達到400 MHZ。我在這樣的硬體環境下撰寫開機程式(boot loader),當然boot loader程式的撰寫是修改別人已經撰寫好的程式,我並沒有真正從無到有去實作一個boot loader,如果你考慮的很完善,一個boot loader事實上還蠻複雜的。我利用ADS工具去編譯我的boot loader,然後產生二進位的機器碼,透過JTag將程式碼放在Flash的最開頭的位置,讓機器一開機就執行這段程式,這個boot loader主要的功能就是初始化系統,例如:設定好工作的clock、輸出入裝置(URAT)的初始化、載入作業系統等工作。在這邊我所使用的作業系統是Linux,最初我也不知道我該用哪種作業系統,所以WIN CE 5.0和Linux兩個作業系統我都有玩過,但是後來選擇了Linux這個作業系統。藉由boot loader將作業系統的核心載入,然後掛上檔案系統,整個系統大致上已經完成了。

之後我又碰到了許多的難題,例如:LED燈號如何控制?Buzzer如何讓它發出聲響?網路如何能正常運作?還有如何去控制Camera?我花了很多時間去學習這些東西的控制,自己摸索著這些訊號,嘗試去驅動這些硬體裝置。後來又將Linux從2.4版更新到2.6版,發現原來所撰寫的模組無法使用,於是重新撰寫這些裝置的模組。因為我並沒有經過正規的訓練與學習,只有從網路上得知一些相關的資料與方法,然後就自己去實驗,自己去研究,在摸索的過程中使我對Linux的架構更佳熟悉。這篇文章主要說明我如何開始接觸硬體,如何開始學習以及我所採取的步驟,提供剛剛進入嵌入式系統世界的人一個參考的資料。
創作者介紹
創作者 CJY0503 的頭像
CJY0503

程式設計者天堂

CJY0503 發表在 痞客邦 留言(0) 人氣()