FB44B0开发板使用三星Samsung的S3C44B0处理器,对这款开发板感兴趣的地方在于它提供IDE接口。

现在支持IDE的开发板并不多见了,研究之后只有TE2440-II,使用三星S3C2440处理器,YL9200,使用ATMEL的AT91RM9200芯片。但价格都偏贵。这款44B0开发板以120元二手价格买到。
FB44B0开发板是44B0开发板中的简化板,没有核心板,全部集成在一张电路板上

板子上的FLASH芯片很奇怪,使用的是AMD的AM29LV160MB,(虽然芯片上的印字是AM29LV160DB,估计是封装时的错误吧)
JTAG接口是14针的,使用JLINK V8无法链接,也许是连接线的问题,反正没调出来
JTAG调试器只能使用Wiggler Parallel并口JTAG调试器

现在找到一台带并口的台式机也不容易了
所以现买了一个USB转并口,还买错了,现在很多都是所谓“打印线”,在XP和Win7中以USBPRINT驱动,转化为USB001端口打印
之后买了USB转真并口,好像是个德国芯片和驱动,驱动只能用在XP的32bit版本中,(Windows7的设置会很麻烦),结果还不好使
实际上,JTAG的用处只有重新烧录FLASH,还有进行DEBUG。
对于DEBUG还是不要过于依赖JTAG的好,44b0自带的启动程序是可以在内存中下载执行程序的,用输出的方式调试感觉更加有效

连接主板的串口1设置速率115200可以接收到以上输出
这个启动程序支持下载和执行
comrun
指令通过串口下载并执行
只能使用DNW工具下载,其他都不好用
netrun
netload
都需要使用TFTP向主板推送
在ADS中编译是必须指定传送的二进制执行文件必须是bin格式



烧录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;    
}完整程序参照附件
附件:http://down.51cto.com/data/2365418
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网页标题:FB44B0开发板测试笔记-创新互联
标题来源:http://www.scyingshan.cn/article/diihhi.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 