天嵌 ARM开发社区

 找回密码
 注册
查看: 6475|回复: 8

可以公布u-boot的USB下载的源码吗

[复制链接]
sjwang 发表于 2009-12-30 00:09:35 | 显示全部楼层 |阅读模式
由于没有仿真器,用nand命令烧写nand flash也不稳定,所以想用usb下载,不知道斑竹能否公布支持usb下载的移值方法?
wuchguang 发表于 2010-9-6 15:42:09 | 显示全部楼层
1# sjwang


先把U-boot烧写到Nor Flash里,再使用Nor方式启动,可以使用U-boot的Usb下载功能把镜像烧写到Nand Flash里去。
U-boot烧到Nor Flash的方法可以看手册《TQ2440开发板使用手册V2.5_20100611.pdf》上第四章开始详细讲到三种方式。
haichang417 发表于 2010-9-9 18:18:58 | 显示全部楼层
USB下载功能是卖点,怎么可以随便公开?呵呵
clever0725 发表于 2010-9-20 10:07:04 | 显示全部楼层
u-boot-2010.06在TQ2440上的移植<11>--支持USB下载 复制地址 日志地址:  

请用Ctrl+C复制后贴给好友。
分享
强 2010年09月17日 21:43 阅读(10) 评论(0) 分类:个人日记 权限: 公开
字体:中▼ 小 中 大 更多▼ 设置置顶 权限设置 推荐日志 转为私密日志 删除 编辑


参考资料,本人仅验货而已,但是这个USB下载真的弄了好几次。都是USB_EN使能脚害了我。

http://chxxxyg.blog.163.com/blog ... 932010813115518537/

http://blog.chinaunix.net/u3/105764/showart_2144192.html

1。在drivers/usb/下面建立新目录

mkdir /drivers/usb/slave

拷贝那个chxxxyg给的源代码。这一部分应该是韦东山原创的。


2。修改uboot根目录下的Makefeils,添加红色部分代码

LIBS += drivers/usb/musb/libusb_musb.a

LIBS += drivers/usb/slave/libusb_slave.a

LIBS += drivers/video/libvideo.a



3。修改lib_arm/board.c文件,添加红色部分代码,增加USB_SLAVE初始化函数。

/* enable exceptions */
enable_interrupts ();
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
#ifdef CONFIG_USB_DEVICE
usb_init_slave();
#endif
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<*/




4。修改平台头文件,include/configs/smdk2440.h,添加红色部分


#define CONFIG_USB_DEVICE 1

#ifdef CONFIG_USB_DEVICE

#define CONFIG_USE_IRQ 1

#endif

//#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */




5。修改cpu/arm920t/s3c24x0/interrupts.c 文件,添加arch_interrupt_init函数定义

添加头文件 #include <asm/io.h>

添加

int arch_interrupt_init (void)
{
    return 0;
}




6。修改arch/arm/cpu/arm920t/start.S,文件


#ifdef CONFIG_USE_IRQ
   
.align    5
    irq:
    //此处开始修改
    /*
        get_irq_stack
        irq_save_user_regs
        bl    do_irq
        irq_restore_user_regs
    */


    /* use IRQ for USB and DMA */
        sub    lr, lr, #4             @ the return address
        ldr    sp, IRQ_STACK_START     @ the stack for irq
        stmdb  sp!,   { r0-r12,lr }    @ save registers
        
        ldr    lr,    =int_return         @ set the return addr
        ldr    pc, =IRQ_Handle         @ call the isr
    int_return:
        ldmia  sp!,   { r0-r12,pc }^    @ return from interrupt
    //,修改结束





7。修改arch/arm/include/asm/arch-s3c24x0.h,文件


#else /*  little endian */

u8FUNC_ADDR_REG;

u8res1[3];

u8PWR_REG;

u8res2[3];

u8EP_INT_REG;

u8res3[15];

u8USB_INT_REG;

u8res4[3];

u8EP_INT_EN_REG;

u8res5[15];

u8USB_INT_EN_REG;

u8res6[3];

u8FRAME_NUM1_REG;

u8res7[3];

u8FRAME_NUM2_REG;

u8res8[3];

u8INDEX_REG;

u8res9[7];

u8MAXP_REG;

//u8res10[7];

u8res10[3];  //by cheny

u8EP0_CSR_IN_CSR1_REG;

u8res11[3];

u8IN_CSR2_REG;

//u8res12[3];

u8res12[7]; //by cheny

u8OUT_CSR1_REG;

//u8res13[7];

u8res13[3];//by cheny

u8OUT_CSR2_REG;

u8res14[3];

u8OUT_FIFO_CNT1_REG;

u8res15[3];

u8OUT_FIFO_CNT2_REG;

u8res16[3];

#endif /*  __BIG_ENDIAN */

u32res17[8]; //by cheny

struct s3c24x0_usb_dev_fifosfifo[5];

u32res18[11]; //by cheny

struct s3c24x0_usb_dev_dmasep1;//by cheny

struct s3c24x0_usb_dev_dmasep2; //by cheny

u8res19[16];//by cheny

struct s3c24x0_usb_dev_dmasep3; //by cheny

struct s3c24x0_usb_dev_dmasep4; //by cheny

//struct s3c24x0_usb_dev_dmasdma[5];

};




8。添加usbslave命令

在common目录下创建cmd_usbslave.c





#include <common.h>

#include <command.h>

#include <asm/byteorder.h>




#ifdef CONFIG_USB_DEVICE




#ifdef CONFIG_USE_IRQ

    #define IRQ_STACK_START    (_armboot_start - CONFIG_SYS_MALLOC_LEN - CONFIG_SYS_GBL_DATA_SIZE - 4)

    #define FIQ_STACK_START    (IRQ_STACK_START - CONFIG_STACKSIZE_IRQ)

    #define FREE_RAM_END        (FIQ_STACK_START - CONFIG_STACKSIZE_FIQ - CONFIG_STACKSIZE)

    #define FREE_RAM_SIZE        (FREE_RAM_END - PHYS_SDRAM_1)

#else

    #define    FREE_RAM_END    (_armboot_start - CONFIG_SYS_MALLOC_LEN - CONFIG_SYS_GBL_DATA_SIZE - 4 - CONFIG_STACKSIZE)

    #define    FREE_RAM_SIZE    (FREE_RAM_END - PHYS_SDRAM_1)

#endif










int g_bUSBWait = 1;

u32 g_dwDownloadLen = 0;




extern int download_run;

extern volatile unsigned int dwUSBBufBase;

extern volatile unsigned int dwUSBBufSize;




extern __u32 usb_receive(char *buf, size_t len, unsigned int wait);




int do_usbslave (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])

{

    int i;

    size_t len = ~0UL;

    char buf[32];




    download_run = 1;

    switch (argc) {

        case 1:

        {

            break;

        }

        case 2:

        {

            g_bUSBWait = (int)simple_strtoul(argv[1], NULL, 16);

            break;

        }




        case 3:

        {

            g_bUSBWait = (int)simple_strtoul(argv[1], NULL, 16);

            load_addr = simple_strtoul(argv[2], NULL, 16);

            download_run = 0;

            break;

        }

        

        default:

        {

            printf ("Usage:\n%s\n", cmdtp->usage);

            return 1;

        }

    }




    dwUSBBufBase = load_addr;

    dwUSBBufSize = (FREE_RAM_SIZE&(~(0x80000-1)));

    if (g_bUSBWait)

        len = FREE_RAM_SIZE;




    g_dwDownloadLen = usb_receive(dwUSBBufBase, len, g_bUSBWait);

    sprintf(buf, "%X", g_dwDownloadLen);

    setenv("filesize", buf);

   

    return 0;

}




U_BOOT_CMD(

    usbslave,    3,    0,    do_usbslave,

    "usbslave - get file from host(PC)\n",

    "[wait] [loadAddress]\n"

    "\"wait\" is 0 or 1, 0 means for return immediately, not waits for the finish of transferring\n"

);




#endif




9。修改common/Makefile
COBJS-$(CONFIG_USB_KEYBOARD) += usb_kbd.o

#+

COBJS-$(CONFIG_USB_DEVICE) += cmd_usbslave.o

#  -




10。修改USB_EN gpio设置

vi board/smdk2440/smdk2440.c





gpio->GPFCON = 0x000055AA;

gpio->GPFUP = 0x000000FF;

//gpio->GPGCON = 0xFF95FFBA;

//gpio->GPGUP = 0x0000FFFF;

gpio->GPGCON = 0xFD95FFBA; //USB_EN by cheny

gpio->GPGUP = 0x0000EFFF; //by cheny

gpio->GPGDAT &= ~(1 << 12);//disable USB Device by cheny




11。下载命令

usbslave 1 0x32000000

nand erase 0x200000 0x300000

nand write  0x32000000 0x200000 0x300000

这个0x300000 是内核的大小 也可以改小写
另在烧写yaffs2文件的时候,这个大小必须是 2048 的倍数 即一个page的倍数

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
天嵌_support1 发表于 2010-9-20 10:55:20 | 显示全部楼层
4# clever0725

顶网友
lantian5435 发表于 2010-9-20 11:59:27 | 显示全部楼层
看看了,呵呵
198944lijing 发表于 2010-12-17 14:54:48 | 显示全部楼层
雷锋啊,向你学习
zuiqiang 发表于 2010-12-18 09:24:45 | 显示全部楼层
不顶楼主对不起党
zhengxi 发表于 2011-2-6 19:09:34 | 显示全部楼层
好好看看,研究下撒
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-18 10:04 , Processed in 1.046875 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表