孫 青,李輝勇
(北京航空航天大學 計算機學院,北京 100191)
嵌入式系統設計是一門多學科交叉的綜合性課程,涉及電子、計算機、通信、網絡等諸多專業知識。隨著物聯網技術的發展,目前已經逐漸成為電子、自動化、計算機等專業的重點建設課程。工程教育認證的背景[1],要求學生具備針對復雜工程問題設計解決方案的能力,并且要求創新意識在設計環節中有所體現。嵌入式系統設計課程的突出特點恰恰是將硬件與軟件緊密捆綁在一起,是訓練軟硬件綜合能力的一個極好的載體,因而在相關領域學生的工程能力培養中越來越凸顯出其重要的作用和地位。
目前,國內許多高校為培養學生軟硬件綜合設計和開發能力,相繼開設了嵌入式系統相關課程[2],但大多以選修課的形式開設,課時也相對較少。嵌入式系統開發技術的綜合性較強,涉及的知識面十分廣泛,既有硬件設計,又有軟件代碼的編寫,并且具有實踐重于理論的特點,因此學生需要進行大量的、分層次、目標性強的實訓練習[3-4]。
當前大部分高校的嵌入式系統開發技術類課程主要分為理論課堂教學和實驗教學兩部分[5]。在學時安排上往往理論課時多,實驗課時少。在有限的實驗學時內,學生的實踐能力難以得到鍛煉。理論課堂教學普遍利用多媒體設備,通過幻燈片講解系統結構、處理器結構、時鐘樹、存儲地址映射、GPIO、中斷、定時器等知識點[6]。相比之下,實驗教學過程中所完成的內容較為單一,多為驗證型實驗,一般采用的模式是教師仔細講解硬件的連接方法,學生進行接線驗證,觀察實驗現象,這一模式下,學生設計和開發完整嵌入式系統的能力得不到有效提高[7]。
在教與學的過程中,這種傳統的教學方式使得學生的實踐能力不足,往往需經過較長期的培訓才能夠從事嵌入式設計相關工作,與這門課程“重在實踐”的特點不相符合。學生沒有親身經歷過硬件電路設計、軟件設計、親手編譯內核以及動手調試的完整實踐過程,很難在建立起嵌入式一些基本概念和硬件經驗的基礎上開始拓展性研究。
由于實驗課時少,過分強調實驗技能的訓練,學生的大部分時間花在進行儀器使用調整、實驗步驟和數據的記錄處理以及得出符合理論的結果等方面,對實驗現象和結果進行的思考、分析、研究少,導致實驗教學效果不佳[8]。一般學校嵌入式系統實驗課時為16 學時。實驗前學生準備不足,學生對老師的依賴性較強,帶來的結果是實驗課教師花費了較多的時間講述嵌入式實驗原理、實驗平臺的操作方法,由于學時緊缺,學生也只能按部就班地按照教師要求進行操作,沒有自由發揮空間,從而導致對實踐過程缺乏興趣和積極性。
嵌入式系統設計技術更新迅速,而嵌入式系統實驗開發箱、仿真工具等實驗耗材往往價格昂貴,相關課程所用實驗設備和實驗平臺往往是間隔幾年依靠經費成批購買,這就導致可能由于經費劃撥和執行周期的限制,實驗設備無法及時更新換代。已有的嵌入式硬件平臺功能不能與嵌入式技術的發展相匹配。另一方面,許多現有的實驗平臺又提供不了靈活的接口途徑,從而不能很好地為嵌入式實踐能力培養提供良好可擴展的實驗條件。
以北京航空航天大學計算機學院為例,面向一、二年級本科生開設了現代電子系統設計方法與工具課程,面向高年級本科生開設了實時嵌入式應用系統課程。兩門課程均為選修課。前者側重于基本的電子電路設計方法的理論介紹,并推薦了嵌入式系統設計硬件電路繪制部分的基本工具,課程內容豐富,知識性強,但受課時和授課場地的限制,學生并沒有進行實際操作,缺少實驗環節;后者學時較多,同時配備理論課與實驗課環節,理論教學內容包括嵌入式硬件基礎、嵌入式操作系統、嵌入式系統的設計與建模、專用接口和硬件加速器等基礎內容,以及分布嵌入式系統、高可靠性嵌入式系統等擴展內容,理論知識點覆蓋非常豐富。實驗部分則包括基礎性實驗和綜合設計實驗兩部分,基礎性實驗以驗證性實驗為主,綜合設計實驗則要求學生面向某綜合應用(指定或者自主提出)而進行設計、編碼和調試并給出一個較為復雜的嵌入式系統完整的解決方案。另外,學院面向研究生開設了嵌入式軟件系統課程,課程實驗內容覆蓋C 和ARM 匯編程序混合設計、嵌入式Linux 串口通信程序設計、嵌入式數據庫、嵌入式GPIO 及中斷、觸摸屏驅動程序設計、網卡驅動程序設計、嵌入式Web 服務器設計等內容,主體側重于嵌入式軟件系統。
與其他的嵌入式相關課程從理論到實踐的授課思路不同,本課程面向本科生開設,旨在提升學生的嵌入式綜合實踐能力。課程層次位于學院已開設的兩門本科嵌入式課程中間,起到承上啟下的作用。目標是依據典型電子系統設計的層次,從元器件級設計入手,自行設計一個最小化的嵌入式系統。學生可按照電子系統設計的一般方法(如圖1 所示),快速構建一個嵌入式核心板,熟悉一些常用的微處理器、存儲器、外設接口并學習硬件設計方法,進一步掌握嵌入式操作系統,定制內核,編譯下載調試,用簡單的驅動程序和應用程序進行軟硬件整機調試,掌握軟硬件調試的常用方法與工具。

圖1 電子系統設計的一般流程
通過設置靈活的、分難度梯度的實驗內容,激發學生參與嵌入式系統實驗的積極性,幫助學生靈活地把已學的知識運用到嵌入式系統中,提高學生嵌入式系統軟硬件知識的綜合運用能力。硬件設計實驗部分,改革過去單純地使用現成的、成熟的嵌入式實驗平臺進行驗證型實驗,將EDA 工具的使用和案例錄制為MOOC,供學生課前預習使用;要求學生能夠運用Protel、Altium Designer 等EDA 工具自行進行個性化設計,以工業界經典的ARM 架構為原型[9],經過電路圖繪制、PCB 設計、制板加工、元件焊接,完成核心板設計與制作(如圖2 所示)。學生可根據自己的情況進行硬件系統元件選型和剪裁。為了保持實驗的連續性,實驗設計完成的硬件系統經過硬件調試后,可以直接為后續其他相關課程實驗所用。

圖2 課程推薦的主控板及外圍電路設計
在硬件設計的過程中,將電路設計分為電源電路、復位和I2C 電路、時鐘電路、JTAG 接口電路、UART 接口電路、按鍵與顯示電路等模塊,要求分步進行電路的設計和原理圖的繪制;提供給學生各模塊的經典電路設計案例,特別要求學生學習閱讀和查找芯片手冊,理解元器件選型時參考參數和電路設計的要點,能夠依據具體的需求目標對系統進行適度剪裁。以某小組學生的復位電路設計為例,學生選用了一款帶有手動復位輸入引腳的電源監控芯片MAX811,并計劃使用JTAG 仿真器進行調試。首先指導學生閱讀芯片手冊,著重為其提煉講解所選用的芯片與Samsumg S3C2410X 的接線方法以及電路復位工作的原理,幫助學生理解ARM 芯片的高速、低功耗和低工作電壓的工作特性,該工作特征導致其噪聲容限低,對電源紋波、瞬態響應性能、時鐘源的穩定性、電源監控的可靠性等諸多方面有很高的要求,因此為保證了系統的可靠性,可繪制如圖3 所示的電路原理圖。將RST 連接到CPU 芯片的復位引腳nRESET,當復位按鍵按下時,復位芯片引腳輸出有效信號,使芯片能夠復位;同時,將調試接口JTAG 與復位芯片連接,用來供開發人員了解CPU 的工作狀態,為學生講解JTAG 調試CPU 的工作機制,學生很快能將相關信號線(VCC、TDI、TMS、TCK、nTRST、GND)進行正確的連接。

圖3 復位電路的原理圖繪制
每3~5 名學生組成一個實驗小組,每名學生負責繪制自主選擇的模塊,同一小組由骨干成員進行匯總。對于學生繪制好的原理圖,首先進行組內互查,然后由實驗教師指導其進行原理圖的檢查、糾錯。檢查通過的小組方可進入到PCB 設計環節。在PCB 設計環節中,學生首先觀看MOOC視頻,學習元件布局、自動及手動布線的要點,在此基礎上進行PCB 設計實踐。完成的PCB 設計交給實驗教師及企業資深硬件工程師,分別對設計進行檢查和反饋,學生依據反饋的結果進一步修改完成作品。檢查通過的作品交由廠商進行制板和核心元器件(主要包括CPUSDRAM 等難度較大的器件)焊接。通過以上的思路指導學生進行“指定核心模塊+自選外圍接口”的硬件電路設計,幫助學生完成“原理圖設計→原理圖分析→網表導出→PCB 元件封裝制作→網表導入→PCB 設計→設計校驗送至線路板制造廠商生產→PCB 元器件組裝焊接→BOOTLOAD 燒寫→啟動Linux 內核下載→Linux 文件系統下載→啟動Linux 測試整機→中斷驅動程序的編譯及測試”的完整流程。
由于電路板生產和焊接具有一定的周期,在此期間的教學活動安排以理論講授為主,講解軟硬件聯調的基本工具和方法,學生在實驗室學習工具的使用;同時,在嵌入式OS 上設計或準備好一些入門的驅動和測試程序,以便將嵌入式OS 和測試程序代碼寫入嵌入式開發板,進行軟硬件聯調和測試。
在軟件設計實驗部分,針對學生在原理圖設計階段選擇的設備,設計相應的實驗案例供學生選擇,引導學生熟悉多任務/多進程管理的簡單嵌入式操作系統(OS)的應用,包括LED、數碼管顯示、觸摸屏等。例如,部分學生選擇利用開發板進行數碼管循環顯示,首先了解數碼管動態顯示原理,學會ARM920T 通用I/O 口的使用,在實例中接入8 個共陽八段數碼管,編程實現數碼管中的某一段點亮的控制(在8 位8 段數碼管上依次顯示0,1,2……8),選用74HC595 實現數據串并轉換的功能。通過給學生講解清楚相關芯片的協同工作原理,學生能夠較快地上手開發程序主程序完成指定的功能:


嵌入式技術的核心是軟件和硬件相結合,對本科生開設這門課程遇到許多實際困難,主要體現在學生通過一、二年級的專業課學習雖然已初步具備計算機體系結構方面的硬件基礎知識,但是突然接觸到直接面向應用的完整的嵌入式系統設計,難免缺乏信心。課程引導學生以嵌入處理器為核心,設計一個規模較小、難度較低的嵌入式應用系統,并且允許學生進行自主的系統裁剪;通過分層次的教學目標正確地引導學生針對某個具體應用。
在教學中還注重培養學生的嵌入式技術的自主學習能力。嵌入式系統設計涉及的知識點龐雜,理論教學不可能面面俱到且難以保證深度,因此,課程借鑒本科畢業設計的教師指導和答疑、學生為主的思路,向學生推薦具有代表性的難易適中的題目;同時,也允許由學生自己查找資料,并和教師一起商議確定系統設計的邊界,完成系統的個性化設計、元器件選型、嵌入式操作系統定制內核、編譯下載調試、驅動程序編寫、應用程序開發等,最后要求實現或部分實現一個具體嵌入式應用的解決方案。從形式上看,具有畢業設計的模式,但相比于畢業設計而言,只側重于一門課程的應用,且時間周期短,課題規模小,要求學生完成嵌入式的最小系統,外圍電路的復雜程度可以由學生自主選擇。學生可以依據自己的基礎和小組成員的實際動手能力選擇:①完成基本的核心硬件模塊設計和調試,包括CPU、FLASH、SDRAM、串 口、USB-Host、電源電路、GPIO、ARMJTAG;②完成更完整的模塊設計和調試,包括CPU、FLASH、SDRAM、串口、網口、USB-Host、電源電路、GPIO、ARMJTAG、LED 模塊;③完成比較復雜的模塊設計和調試,包括CPU、FLASH、SDRAM、串口、網口、USB-Host、電源電路、GPIO、ARMJTAG、數碼管顯示模塊或LCD。無論選擇哪種實訓目標,制作完成的ARM 核心開發板都具有高度的擴展性,可供小組成員后續嵌入式應用開發使用,極大地提升學生的學習興趣。
課程從實際制板入手,指導學生全面了解嵌入式系統軟硬件綜合設計過程。以實驗教學為主線,用難度適中的、與工業界成熟產品接軌的綜合項目貫穿課程;帶領學生熟悉開發環境,掌握嵌入式處理器技術及各類接口設計,熟悉嵌入式操作系統和軟件開發;完成電路原理圖設計與PCB 板設計、整機焊接與調試、BootLoader 設計、驅動測試程序設計。根據實踐環節的進展情況,合理安排理論教學的內容和進度,從設計實踐入手,全程配合理論內容的設計,將軟硬件綜合設計方法和流程、電子電路設計的基本知識、嵌入式操作系統、嵌入式軟件開發環境等知識與實踐環節進行良好的銜接,使學生在實踐操作中得到有效的指導。
用“理論授課+翻轉課堂”的教學模式實現了差異化教學。雖然經過本科階段前兩年計算機軟硬件課程的學習,學生的總體知識儲備逐年提升,但是個體差異并未真正縮小。選擇學習這門課程的學生普遍是對計算機硬件感興趣的,但是部分學生對于電子電路設計的基礎知識實際仍然比較欠缺。在初次接觸實操設計完整的嵌入式系統并將其轉化為電路原理圖、印刷電路板圖時會遇到各種不同的問題,這些問題在課堂講授的過程雖然能夠解決,但是需要花費大量的時間,每位學生的進度和掌握情況不一,而設計完成的成品生產周期通常又有固定的時間要求。因此,課程推行分組、分層次教學,將電路圖設計工具、調試指導等環節MOOC 化,供不同基礎的學生在課前預習、課中參考、課后復習,學生學習的成就感和興趣大大提高。
為提高嵌入式系統設計實訓課程的教學效果,課程在考核環節更加注重平時的成績和實際能力相結合。作為一門典型的以實驗為主的課程,在考核方式上進行了更加合理的統籌規劃。教師進行實驗內容講授時,一方面充分利用了微小視頻等方式總結各類工具的操作方法,幫助學生快速上手實操,從而概要地、形象直觀且高效地完成實驗項目的講解,為學生實際動手贏得時間,使得學生能夠提升在有限學時內的項目達成度;另一方面在進行實驗項目講解時,通過互動抽查學生預習實驗內容及有關資料、元器件說明書等的完成情況,將其狀況計入實驗成績,從而促進學生形成了良好的預習習慣,加強實驗過程管理;在軟硬件調試環節,并不以最終成品作為唯一評判標準,而是通過考核引導學生在教師指導下完成調試結果的分析討論,逐步提高了他們的獨立思維及對錯誤的定位和判斷能力,取得和改進的實驗效果,達到了提高實驗教學質量的目標。