您好,登錄后才能下訂單哦!
FB44B0開發(fā)板使用三星Samsung的S3C44B0處理器,對(duì)這款開發(fā)板感興趣的地方在于它提供IDE接口。
現(xiàn)在支持IDE的開發(fā)板并不多見了,研究之后只有TE2440-II,使用三星S3C2440處理器,YL9200,使用ATMEL的AT91RM9200芯片。但價(jià)格都偏貴。這款44B0開發(fā)板以120元二手價(jià)格買到。
FB44B0開發(fā)板是44B0開發(fā)板中的簡(jiǎn)化板,沒有核心板,全部集成在一張電路板上
板子上的FLASH芯片很奇怪,使用的是AMD的AM29LV160MB,(雖然芯片上的印字是AM29LV160DB,估計(jì)是封裝時(shí)的錯(cuò)誤吧)
JTAG接口是14針的,使用JLINK V8無(wú)法鏈接,也許是連接線的問(wèn)題,反正沒調(diào)出來(lái)
JTAG調(diào)試器只能使用Wiggler Parallel并口JTAG調(diào)試器
現(xiàn)在找到一臺(tái)帶并口的臺(tái)式機(jī)也不容易了
所以現(xiàn)買了一個(gè)USB轉(zhuǎn)并口,還買錯(cuò)了,現(xiàn)在很多都是所謂“打印線”,在XP和Win7中以USBPRINT驅(qū)動(dòng),轉(zhuǎn)化為USB001端口打印
之后買了USB轉(zhuǎn)真并口,好像是個(gè)德國(guó)芯片和驅(qū)動(dòng),驅(qū)動(dòng)只能用在XP的32bit版本中,(Windows7的設(shè)置會(huì)很麻煩),結(jié)果還不好使
實(shí)際上,JTAG的用處只有重新燒錄FLASH,還有進(jìn)行DEBUG。
對(duì)于DEBUG還是不要過(guò)于依賴JTAG的好,44b0自帶的啟動(dòng)程序是可以在內(nèi)存中下載執(zhí)行程序的,用輸出的方式調(diào)試感覺更加有效
連接主板的串口1設(shè)置速率115200可以接收到以上輸出
這個(gè)啟動(dòng)程序支持下載和執(zhí)行
comrun
指令通過(guò)串口下載并執(zhí)行
只能使用DNW工具下載,其他都不好用
netrun
netload
都需要使用TFTP向主板推送
在ADS中編譯是必須指定傳送的二進(jìn)制執(zhí)行文件必須是bin格式
燒錄FLASH時(shí)必須使用
燒錄工具和JTAG的支持工具都是比較老的,只能在XP的32位系統(tǒng)中執(zhí)行
燒錄的文件是HEX格式的,感覺BANYAN還是比較好用,雖然只是測(cè)試版
FlashPgm也可以成功燒錄
對(duì)主板的測(cè)試的最主要目的還是了解IDE的控制方法
主板的例程源碼有誤,正確的寄存器定義如下,(已經(jīng)過(guò)測(cè)試)
#define IDE_DAT 0x4000002 #define IDE_ERR 0x4000012 #define IDE_FEATURE IDE_ERR #define IDE_SEC_CNT 0x4000022 #define IDE_SEC_NUM 0x4000032 #define IDE_LBA0 IDE_SEC_NUM #define IDE_LBA1 0x400000a #define IDE_LBA2 0x400001a #define IDE_LBA3 0x400002a //#define IDE_LBA_SEL 0x400002a #define IDE_CMD 0x400003a #define IDE_STATUS 0x400003a #define IDE_ALT_STATUS 0x0400002c // R ->3F6h #define IDE_DEV_CTRL 0x0400002c // W ->3F6h #define IDE_DRV_ADDR 0x0400003c // R ->3F7h
所有這些寄存器都可以和PC主板對(duì)應(yīng)
根據(jù)ATA7的標(biāo)準(zhǔn)描述,定義了DEVICE IDENTIFY命令的結(jié)構(gòu)
static union UN_HD_DEV_IDENT { U8 byte[512]; U16 dat[256]; struct _s_devid { struct _s_conf { U16 rev_0:2; U16 resp_incomp:1; U16 rev_1:4; U16 removable:1; U16 rev_2:7; U16 ata:1; // 0 = ata } s_conf; // 0 U16 rev_1; // 1 U16 spec_conf; // 2 U16 rev_3[7]; // 3-9 U8 serial_number[20]; // 10-19 U16 rev_20[3]; // 20-22 U8 firmware_version[8]; // 23-26 U8 model_number[40]; // 27-46 struct _s_multi_cmd { U16 max_num:8; // 00h=resv 01h-ffh=max multi command number U16 fix:8; // 80h } s_multi_cmd; // 47 U16 rev_48; // 48 struct _s_compability { U16 rev0:8; U16 dma:1; U16 lba:1; U16 iordy_disable:1; U16 iordy_support:1; U16 rev12:1; U16 standby:1; U16 rev14:2; } s_compability; // 49 U16 compability2; // 50 U16 rev_51[2]; // 51-52 U16 ref53; // 53 U16 rev_54[5]; // 54-58 U16 multi_sector; // 59 U16 user_sector_number[2]; // 60-61 U16 rev_62; // 62 U16 multi_word_dma[6]; // 63-68 U16 rev_69[6]; // 69-74 U16 max_queue; // 75 U16 rev_76[4]; // 76-79 struct _s_major_number { U16 rev0:1; U16 ata1:1; U16 ata2:1; U16 ata3:1; U16 ata4:1; U16 ata5:1; U16 ata6:1; U16 ata7:1; U16 ata8:1; U16 ata9:1; U16 rev10:6; } s_major_number; // 80 U16 minor_number; // 81 struct _s_cmd_set { U16 smart:1; U16 security:1; U16 removable:1; U16 power_manage:1; U16 rev4:1; U16 write_cache:1; U16 look_ahead:1; U16 release_intr:1; U16 serv_intr:1; U16 reset:1; U16 protect_area:1; U16 rev11:1; U16 write_buf:1; U16 read_buf:1; U16 nop:1; U16 rev15:1; } s_cmd_set; // 82 U16 cmd_sets; // 83 U16 cmd_set_ext; // 84 struct _s_cmd_set s_cmd_set_enable; // 85 U16 cmd_sets_enable; // 86 U16 cmd_set_ext_enable; // 87 U16 dma_mode; // 88 U16 value89[6]; // 89-94 U16 stream[5]; // 95-99 U8 user_max_lba[8]; // 100-103 U16 stream_pio; // 104; U16 rev105; // 105 struct _s_phy_lgc_sec { U16 lgc_per_phy:4; // 2^? U16 rev4:8; U16 longer:1; // longer than 256 words per logic sector U16 multi_logic:1; // multi logic per phy sector U16 value14:2; // bit set to 14:1 15:0 } s_phy_lgc_sec; // 106 U16 interseek; // 107 U16 uniqueid[4]; // 108-111 U16 rev112[5]; // 112-116 U16 words_per_logic[2]; // 117-118 U16 rev119[8]; // 119-126 U16 removable_status; // 127 U16 sec_status; // 128 U16 vendor129[31]; // 129-159 U16 cfa_power; // 160 U16 rev161[15]; // 161-175 U16 serial_number_vendor[30]; // 176-205 U16 rev206[49]; // 206-254 U16 integrity; // 255 } s_devid; } u_hdpara;
寄存器同樣支持LBA48協(xié)議
U8 ReadSectorLBA48(long long lba) { U8 lbas[6]; U16 dat; int ii; U8 stt; for (ii=0; ii<6; ii++) { lbas[ii] = lba; lba>>=8; } SetIdeCount(0); SetIdeCount(1); SetLBA2(lbas[5]); SetLBA1(lbas[4]); SetLBA0(lbas[3]); SetLBA2(lbas[2]); SetLBA1(lbas[1]); SetLBA0(lbas[0]); SetDrvLBA3(0xE0, 0); while ((inportb(IDE_STATUS) & 0xC0)!=0x40); SetIdeCmd(0x24); while ((inportb(IDE_STATUS) & 0x88)!=0x08); for (ii=0; ii<256; ii++) { dat = GetIdeData(); printf("0x%04x ", dat); } printf("\n"); stt = inportb(IDE_STATUS); while ((stt & 0x88) != 0x00) { stt = inportb(IDE_STATUS); } return stt; }
完整程序參照附件
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。