2014年5月7日 星期三

STM32 USB驅動程式的第一次

Bee大部分用RS232和PC溝通。但現在PC有RS232越來越少了。所以轉往USB看看。
USB的資料相對龐大許多。且USB相關程式也不在一般驅動函式庫上。
新的標準驅動函式庫已加入USB相關,有獨立資料夾,內容還是很多。
對於MCU的工程師來說,USB可能比CPU還要複雜。除了硬體層外,還有還有連接PC時一堆程序。
另一個問題是,無法像以前一樣用示波器就可以看。沒有封包解析器,完全無法了解到底是怎麼回事。
USB入門還真是不簡單!

結果,只有從依樣畫葫蘆開始,用Demo板上的USB及程式下去試。
內定的專案及程式是可以用。用的是High Speed的程式。
改為Full Speed端,就又不行了。
因為High Speed用的腳位太多了,會降低使用場合,還是FS有價值,但就是連不上。
Google了很多文章,突然出現一個字VBUS_SENSING_ENABLED。
心想,該不會除了D+及D-外,就是這支腳的問題了。於是註解掉重編譯。
總算過了!

只能說:比CPU還難搞!

2014年5月2日 星期五

MCU作業系統硬體化構想

Bee在大陸網站時討論的構想。現在台灣已沒有可討論的地方,所以逛到對岸去。
Bee曾說過,中斷是實現作業系統一個很重要的關鍵功能。
所以常用的作業系統功能是可以被硬體化的。
在PC上MMU就是一例。
而在MCU側,因無MMU環境多,被硬體化的地方其實不多。
而MCU使用RTOS的工程師比例也不高。所以作業系統硬體化不積極。

分析MCU上使用RTOS的需求,其實除了週邊硬體中斷外,使用最多的就是Timer。
所以Timer硬體化應是需求最高的。
其實很多RTOS也是以工作切換需時短做為其效能指標。
故RTOS的system tick一直是最常用到的函式。
在RTOS移植的第一個工作為context switch後,第二個工作就是system tick的移植。

在使用Cortex M3時可以發現system tick已經標準化。中斷也標準化。
所以Cortex M系統可以開始進行RTOS的統一。因為C語言已可以做完一大半工作。
現在RTOS仍有組合語言,是因為Task Control Block(TCB)各家不同,仍需用組合語言去完成。
即使TCB有統一,執行時最常用到的仍是system tick。
所以TCB使用硬體做,連接上system tick及其管理能力,就等於是將RTOS硬體化。
此時所有的程式看起來會有自己的CPU,但其實只是在RAM上的CPU暫存器影像。
也就是MCU開始具有虛擬化CPU核心的能力再加上system tick調度的能力。
這樣就算是完成RTOS硬體化。

若是這個硬體可以做進MCU,RTOS也就大一統了。
依現在人人都可以做出RTOS的狀況下,等在後面的是硬體公司的RTOS硬體化。
技術門檻變低的同時,也要小心全自動化的取代。