溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

FB44B0開發(fā)板測(cè)試筆記

發(fā)布時(shí)間:2020-06-29 12:03:15 來(lái)源:網(wǎng)絡(luò) 閱讀:779 作者:btvnlue 欄目:開發(fā)技術(shù)

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)化板,沒有核心板,全部集成在一張電路板上

FB44B0開發(fā)板測(cè)試筆記

板子上的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)試器

FB44B0開發(fā)板測(cè)試筆記

現(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)試感覺更加有效


FB44B0開發(fā)板測(cè)試筆記


連接主板的串口1設(shè)置速率115200可以接收到以上輸出

這個(gè)啟動(dòng)程序支持下載和執(zhí)行

comrun

指令通過(guò)串口下載并執(zhí)行

只能使用DNW工具下載,其他都不好用

netrun

netload

都需要使用TFTP向主板推送

在ADS中編譯是必須指定傳送的二進(jìn)制執(zhí)行文件必須是bin格式

FB44B0開發(fā)板測(cè)試筆記

FB44B0開發(fā)板測(cè)試筆記

FB44B0開發(fā)板測(cè)試筆記

燒錄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;    
}

完整程序參照附件

附件:http://down.51cto.com/data/2365418
向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI