FB44B0开发板测试笔记-创新互联

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

公司主营业务:成都做网站、网站建设、外贸营销网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出南湖免费做网站回馈大家。

现在支持IDE的开发板并不多见了,研究之后只有TE2440-II,使用三星S3C2440处理器,YL9200,使用ATMEL的AT91RM9200芯片。但价格都偏贵。这款44B0开发板以120元二手价格买到。

FB44B0开发板是44B0开发板中的简化板,没有核心板,全部集成在一张电路板上

FB44B0开发板测试笔记

板子上的FLASH芯片很奇怪,使用的是AMD的AM29LV160MB,(虽然芯片上的印字是AM29LV160DB,估计是封装时的错误吧)

JTAG接口是14针的,使用JLINK V8无法链接,也许是连接线的问题,反正没调出来

JTAG调试器只能使用Wiggler Parallel并口JTAG调试器

FB44B0开发板测试笔记


现在找到一台带并口的台式机也不容易了

所以现买了一个USB转并口,还买错了,现在很多都是所谓“打印线”,在XP和Win7中以USBPRINT驱动,转化为USB001端口打印

之后买了USB转真并口,好像是个德国芯片和驱动,驱动只能用在XP的32bit版本中,(Windows7的设置会很麻烦),结果还不好使

实际上,JTAG的用处只有重新烧录FLASH,还有进行DEBUG。

对于DEBUG还是不要过于依赖JTAG的好,44b0自带的启动程序是可以在内存中下载执行程序的,用输出的方式调试感觉更加有效

FB44B0开发板测试笔记

连接主板的串口1设置速率115200可以接收到以上输出

这个启动程序支持下载和执行

comrun

指令通过串口下载并执行

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

netrun

netload

都需要使用TFTP向主板推送

在ADS中编译是必须指定传送的二进制执行文件必须是bin格式

FB44B0开发板测试笔记

FB44B0开发板测试笔记

FB44B0开发板测试笔记

烧录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://myzitong.com/article/diihhi.html