FB44B0開發板測試筆記

FB44B0開發板使用三星Samsung的S3C44B0處理器,對這款開發板感興趣的地方在於它提供IDE接口。

現在支持IDE的開發板並不多見了,研究之後只有TE2440-II,使用三星S3C2440處理器,YL9200,使用ATMEL的AT91RM9200芯片。但價格都偏貴。這款44B0開發板以120元二手價格買到。

FB44B0開發板是44B0開發板中的簡化板,沒有核心板,全部集成在一張電路板上

wKiom1TbcNrharjVAAHYTvwU50g068.jpg

板子上的FLASH芯片很奇怪,使用的是AMD的AM29LV160MB,(雖然芯片上的印字是AM29LV160DB,估計是封裝時的錯誤吧)

JTAG接口是14針的,使用JLINK V8無法鏈接,也許是連接線的問題,反正沒調出來

JTAG調試器只能使用Wiggler Parallel並口JTAG調試器

wKioL1TbdN-Cs4rQAACXc8nX-pE037.jpg

現在找到一臺帶並口的臺式機也不容易了

所以現買了一個USB轉並口,還買錯了,現在很多都是所謂“打印線”,在XP和Win7中以USBPRINT驅動,轉化爲USB001端口打印

之後買了USB轉真並口,好像是個德國芯片和驅動,驅動只能用在XP的32bit版本中,(Windows7的設置會很麻煩),結果還不好使


實際上,JTAG的用處只有重新燒錄FLASH,還有進行DEBUG。

對於DEBUG還是不要過於依賴JTAG的好,44b0自帶的啓動程序是可以在內存中下載執行程序的,用輸出的方式調試感覺更加有效


wKiom1TbdzqjIOGzAAHRO-QDdO4087.jpg


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

這個啓動程序支持下載和執行

comrun

指令通過串口下載並執行

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

netrun

netload

都需要使用TFTP向主板推送

在ADS中編譯是必須指定傳送的二進制執行文件必須是bin格式

wKioL1TbejWgAbzRAAD1uYHgY60547.jpg

wKiom1TbeeLAsOWoAAJMaJ8PIEM731.jpg

wKioL1TbetizZzjpAAIyTYAW__8574.jpg

燒錄FLASH時必須使用

燒錄工具和JTAG的支持工具都是比較老的,只能在XP的32位系統中執行

燒錄的文件是HEX格式的,感覺BANYAN還是比較好用,雖然只是測試版

FlashPgm也可以成功燒錄


對主板的測試的最主要目的還是瞭解IDE的控制方法

主板的例程源碼有誤,正確的寄存器定義如下,(已經過測試)

#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主板對應

根據ATA7的標準描述,定義了DEVICE IDENTIFY命令的結構

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協議

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

完整程序參照附件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章