搜索
bottom↓
回复: 9

10.1寸白菜平板DIY之使用u-boot进行tftp下载

[复制链接]

出0入0汤圆

发表于 2013-5-8 23:46:59 | 显示全部楼层 |阅读模式
上一次我们已经写好了启动代码和简单的LED点灯,我们也发现了板子上的u-boot已经帮我们把板子的一些硬件给初始化了,比如系统时钟配置,DDR2内存的初始化等等。经过复位启动板子我发现,u-boot有一秒钟的启动延时。在启动时快速的按下键盘的任意键可跳过u-boot的自动启动,进入到u-boot的命令行,如下图:

输入"?"或"help"可以看到提供的一些命令,其中就有我们最关心的tftp命令,如下图:


输入printenv打印出u-boot设置的一些环境变量,我们发现并没有设置serverip和ipaddr,所以直接用tftp是不行的,必须先设置服务ip和板子的ip。
输入"setenv serverip 192.168.0.86"命令设置服务IP,这个为你的TFTP服务器IP,这里设置的是我们电脑的IP,因为我们要在我们的电脑上启动TFTP服务。
再输入"setenv ipaddr 192.168.0.100"设置你板子的IP,192.168.0.100是自己指定的,只要是和你的服务IP在同一个网段即可,根据自己实际情况定。
接下来输入"saveenv"保存设置,但这里可以不用,因为板上的u-boot是保存不了的,应该是移植的bug。
接下来就是要tftp下载我们的程序了。
首先,我们需要一个小工具在我们的PC端建立一个tftp服务。这里我们用“tftpd32.exe”这个小工具来完成。
将tftpd32.exe复制到工程的输出文件夹并点击运行就可以了,运行后就建立了tftp服务,服务目录为我们的输出文件夹,如下图:

启动服务以后,我们就可以进行tftp下载了。
在终端输入“tftp 40000000 Project.bin”回车即可将bin文件下载到0x40000000地址处,再输入"go 40000000"即可执行刚刚下载的bin文件。
因为u-boot已经把uart3初始化配置好,波特率为115200,所以我们在我们的工程中,加入几个函数即可实现简单的串口信息输出,帮助我们开发调试使用。
  1. //串口3发送一个字节
  2. void uart3_send_byte(uint8_t data)
  3. {   
  4.      while((LSR3&(0x01<<5))==0);
  5.                  THR3=data;
  6. }
  7. //串口3发送一串字符
  8. void uart3_send_string(const  uint8_t *pt)
  9. {
  10.     while(*pt)
  11.         {
  12.     uart3_send_byte(*pt);
  13.         pt++;
  14.         }
  15. }

  16. //类似printf的调试函数
  17. void debug(char* fmt, ...)
  18. {
  19.     char* pArg= (void*)0;//等价于原来的va_list
  20.     char c;
  21.           char buf[64];
  22.     pArg = (char*) &fmt;//注意不要写成 p=fmt !! 因为这里要对参数取址,而不是取值
  23.     pArg += sizeof(fmt);//等价于原来的va_start        
  24.    
  25.     do
  26.     {
  27.         c =*fmt;
  28.         if (c != '%')
  29.         {
  30.             uart3_send_byte(c);//照原样输出字符
  31.         }
  32.         else
  33.         {
  34.             //按格式字符输出数据
  35.             switch(*++fmt)
  36.             {
  37.                 case 'd':
  38.                     sprintf(buf,"%d",*((int*)pArg));  
  39.                     pArg += sizeof(int); //等价于原来的va_arg                                                               
  40.                     break;
  41.                 case 'x':
  42.                     sprintf(buf,"%x",*((int*)pArg));
  43.                                                                     pArg += sizeof(int); //等价于原来的va_arg
  44.                     break;
  45.                                 case 'f':
  46.                                         sprintf(buf,"%f",*((float*)pArg));
  47.                                         pArg += sizeof(float); //等价于原来的va_arg
  48.                 default:
  49.                     break;
  50.             }
  51.            uart3_send_string((const uint8_t *)buf);
  52.         }
  53.         ++fmt;
  54.     }while (*fmt != '\0');
  55.     pArg = (void*)0; //等价于va_end
  56.     return;
  57. }
复制代码
在主函数中测试一下,输入如下代码:
  1. int main(void)
  2. { uint32_t i=0;
  3.         LED_GPIO_Config();
  4.         while (1)
  5.         {        
  6.      debug("hello,I am xiaonong! This is line %d\r\n",++i);
  7.                  delay_ms(500);
  8.                  LED1(OFF);
  9.                  delay_ms(500);
  10.                  LED1(ON);
  11.         }
  12. }
复制代码
按上面是下载方法下载到平板将会在串口输出如下:

因为板子上面的u-boot不能保存设置的环境变量,每次重新启动都要重新配置IP,比较烦。
还好u-boot支持多条指令输入,直接一次输入"setenv serverip 172.16.58.220;setenv ipaddr 172.16.58.235;tftp 40000000 Project.bin;go 40000000"就可以实现下载并运行。
但是板子复位再上电启动还是比较麻烦,而且每次按键盘慢一点就会启动安卓内核。
我把平板的复位按键直接飞线连接到了home键上,把pwr电源键直接飞线短接,这样就实现了按下home键自动重新启动,比较方便调试。

每个按键旁边都有一个tp焊盘,飞线很方便。

电源键飞线。
接好两个飞线以后,把调试的FPC通过触摸笔那个插槽引出,将屏幕安装上,机器装好。

按下home键会进行复位重启,可以很方便的调试了。

本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-5-9 14:40:04 | 显示全部楼层
虽然不懂,看着牛B,顶顶更健康

出0入663汤圆

发表于 2013-5-9 15:10:30 | 显示全部楼层
我的没GPS,TTL是从天线孔引出的。

出0入55汤圆

发表于 2013-5-9 15:56:44 | 显示全部楼层
第一次靠近大牛们如此近。顶一个

出0入0汤圆

发表于 2013-5-9 17:07:55 | 显示全部楼层
楼主这是要准备移植内核到平板?

出0入0汤圆

发表于 2013-5-9 17:24:38 | 显示全部楼层
我的在吃灰尘。。。。。。。

出0入0汤圆

 楼主| 发表于 2013-5-9 18:14:17 | 显示全部楼层
哈哈,现在已经搞定时钟配置和LCD了,我现在CPU工作在异步模式,主频1.2G,爽啊~

出0入0汤圆

 楼主| 发表于 2013-5-9 18:16:02 | 显示全部楼层
gzhuli 发表于 2013-5-9 15:10
我的没GPS,TTL是从天线孔引出的。

我的貌似有GPS 呢,板上有个该金属盒子的小模块,看原理图好像就是GPS来的~

出0入0汤圆

发表于 2013-5-9 19:00:21 | 显示全部楼层
看着很牛逼的样子,顶一下

出0入0汤圆

发表于 2013-5-9 19:14:18 | 显示全部楼层
置酷没商量。。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 13:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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