现在的位置: 首页 > 综合 > 正文

关于Uboot的USB下载功能

2013年02月03日 ⁄ 综合 ⁄ 共 1692字 ⁄ 字号 评论关闭

usb下载功能这个功能很实用,有些开发板并不提供带有usb下载功能的uboot,那么我们就自己动手制作一个uboot。其他的功能如Nor FLASH读写、 Nand FLASH 读写 、Nor & NAND引导LINUX\支持网卡、DM9000、TFTP 功能和NFS 下载(切记关掉各种防火墙,或者杀毒软件)、支持jffs2 & YAFFS 文件系统。网络上都很齐全资料。推荐大家看看天翔电子的U-BOOT-2010.06移植手册和友善之臂提供的Mini2440之U-boot使用及移植详细手册。前者步骤明确、思路更加清晰,更加适合新手学习。不过两个手册都没有对USB下载功能的关于硬件细节说清楚。

       很多人USB的电脑驱动是正确的,但是DNW中会提示usb host is not connected yet错误。这是因为你的硬件没有设置好。硬件设置步骤是1. 设置GPG9为输出引脚(ok2440.c);2. 然后先设输出0(ok2440.c); 3. 最后在usb_init_slave函数中,输出1,使能(usbinit.c)。

      还有人是在编译u_boot.bin的时候Port_Init()和usb_init()出错。那是因为你下载的usb slave源码版本不对。

      slave源码的版本不止一种。http://blog.chinaunix.net/uid-8087110-id-1989046.html的源码就是有Port_Init()和usb_init() (usbinit.c)。我用的是https://github.com/tekkamanninja/u-boot-2010.03-tekkaman中提取的usb slave源码。

       下面我就来胡说八道一番。当然我是参考了网上别人移植的步骤,如果我侵犯了谁的权益,请直接拨打客服110。

       其实大家在网上都能找到移植的步骤,大同小异。只是很少有人来说硬件引脚问题。比如我的板子是GPG9作为USB_EN的引脚,驱动USB工作。有其他人的板子是GPG12引脚USB_EN的引脚。那么移植的时候就要看自己的硬件实际情况了。以我的板子为例,简要说一下吧。涉及到的文件 board/samsung/ok2440/ok2440.c 和 drivers/usb/slave/usbinit.c(uboot的版本不同可能文件目录也会不同,我的是u-boot-2010.06版本)。

board/samsung/ok2440/ok2440.c中的int board_init (void)函数

中设置好引脚:输出功能、输出低电平,关闭USB使能。

gpio->GPGCON = 0xFF95FFBA;
gpio->GPGUP = 0x0000FFFF;
gpio->GPGDAT &= ~(1<<9);

drivers/usb/slave/usbinit.c中的void usb_init_slave(void)函数

writel((readl(&gpioregs->MISCCR) & ~((1<<3) | (1<<12) | (1<<13))), &gpioregs->MISCCR);
// USBD is selected instead of USBH1
// USB port 1 is enabled.
// USBD should be initialized first of all.

MISCCR杂项控制寄存器   第3、12、13是和USB相关的,记住板子不同,实用USB端口的情况不同,别给挂起了。

writel((readl(&gpioregs->GPGDAT) | (1<<9)), &gpioregs->GPGDAT);

/* enable USB Device, thisway.diy */

这里是驱动USB,我的是GPG9管脚,输出高电平,使能之。

drivers/usb/slave/usbinit.c中的void udc_disconnect (void) 函数
writel((readl(&gpioregs->GPGDAT) & ~(1<<9)), &gpioregs->GPGDAT);

 这里是关闭USB,我的是GPG9管脚,输出低电平,关闭之。

抱歉!评论已关闭.