為了讓您更清楚intelj3 flash的架構,我寫了小程式來說明。
Intelj3裡只有5個function可以用,以及4個command。
5個function
outw, inw, fastin, fastout, multiout
簡單的說..只有寫1個word,讀1個word,
及寫1片地址,讀1片地址。
最後一個是合併多個地址 資料。
4個command
#define RESET_TARGET (0x3a) -->將板子reset
#define RESET_HOLD (0x3b) -->將cpu reset之後停住,尚未執行boot code
#define RESET_AICE (0x3c) -->reset AICE
#define HOLD_CORE (0x1d) -->將cpu不執行指令
測試程式如附件,p1.gif是我的執行結果。(我是用SN801的板子測的)
上面說的5個function,是由AICE寫資料進去,
燒flash時,寫的是flash controller的寄存器。
但是其實寫memory也是同樣可以的。
所以我這裡是寫memory做為示範。
printf("--------------write an address---------------------\n");
outw(0x800000,0x12345678); -->寫 0x12345678到SRAM 0x800000裡面。
outw(0x900000,0x12345678);
outw(0xA00000,0x12345678);
//fastout(0x0, 4, buff1);
value=inw(0x800000);
printf("0x800000=%xu\n",value);
value=inw(0x900000);
printf("0x900000=%xu\n",value);
fastout(0x800004, 8, buff1); -->寫0x41414141 0x41414141
value=inw(0x800004);
printf("0x800004=%xu\n",value);
value=inw(0x800008);
printf("0x800008=%xu\n",value);
程式的執行流程
(1) 連接AICE
(2) HOLD code或是RESET_HOLD
(3) 燒code
(4) 執行完成,RESET target。
總之...當您寫您的flash program時,
並不需要參考IntelJ3的spec。
您只要熟悉您的flash spec即可。照它的spec去寫寄存器。
Attachment:
p1.gif [ 24.09 KiB | Viewed 12548 times ]
Attachment:
src-IntelJ3.7z [622.31 KiB]
Downloaded 1016 times