|
如果 SMDK6400 的UBOOT寫法和 SMDK2440 的一樣的話, 32MB就是上限了.
其中的原因在於 UBOOT 中的規劃為前32MB為 BINFS 使用, 後 32MB為
DMA Buffer 供USB接收PC端來的資料用.治標解法為BIN檔不要大於32MB
. 治本的方法是修改 UBOOT 中USB接收PC端來的資料的方式改成 Ring-Buffer
的方式.
我另外大略說明一下 原本UBBOT 的動作.
UBOOT 為一個 Main() 做資料搬移的寫入 Flash, 和一個 USB Interrupt Handler 在做資料接收的動作.
USB Interrupt Handler 在每次有資料時會將資料直接寫入 DMA Buffer(後 32MB), 其 Write Pointer
起始位置為32MB處, 一直寫, 直到資料接收到完或是寫超過64MB, 超過64MB當然就停住了.而 Main()在
USB Interrupt Handler 沒有動作的空檔,會將已接收的資料搬移到前 32MB, 也就是BINFS的地方(前32MB),
起始位置 0MB處, 而Main()有二個 Pointer, 一個是 Read Pointer 記錄已搬移DMA Buffer 的資料到那
裏, 另一個 Pointer 則是記錄寫到 BINFS 中的那一個位址了. 在程式的運行中, Read Pointer <= Write
Pointer.
在SMDK2440時, 我有將UBOOT改成 Ring-Buffer 的方式,最小可以將 DMA Buffer 縮小到 8MB還是16MB忘了
, 太小會幾乎每次都發生Write Pointer 追趕上 Read Pointer,沒法子, Interrupt Handler 的 Priority
還是比 Main()高. |
|