|
上一次我们已经写好了启动代码和简单的LED点灯,我们也发现了板子上的u-boot已经帮我们把板子的一些硬件给初始化了,比如系统时钟配置,DDR2内存的初始化等等。经过复位启动板子我发现,u-boot有一秒钟的启动延时。在启动时快速的按下键盘的任意键可跳过u-boot的自动启动,进入到u-boot的命令行,如下图:
![](http://attach://110676.jpg)
输入"?"或"help"可以看到提供的一些命令,其中就有我们最关心的tftp命令,如下图:
![](http://attach://110685.jpg)
输入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服务,服务目录为我们的输出文件夹,如下图:
![](http://attach://110783.jpg)
启动服务以后,我们就可以进行tftp下载了。
在终端输入“tftp 40000000 Project.bin”回车即可将bin文件下载到0x40000000地址处,再输入"go 40000000"即可执行刚刚下载的bin文件。
因为u-boot已经把uart3初始化配置好,波特率为115200,所以我们在我们的工程中,加入几个函数即可实现简单的串口信息输出,帮助我们开发调试使用。- //串口3发送一个字节
- void uart3_send_byte(uint8_t data)
- {
- while((LSR3&(0x01<<5))==0);
- THR3=data;
- }
- //串口3发送一串字符
- void uart3_send_string(const uint8_t *pt)
- {
- while(*pt)
- {
- uart3_send_byte(*pt);
- pt++;
- }
- }
- //类似printf的调试函数
- void debug(char* fmt, ...)
- {
- char* pArg= (void*)0;//等价于原来的va_list
- char c;
- char buf[64];
- pArg = (char*) &fmt;//注意不要写成 p=fmt !! 因为这里要对参数取址,而不是取值
- pArg += sizeof(fmt);//等价于原来的va_start
-
- do
- {
- c =*fmt;
- if (c != '%')
- {
- uart3_send_byte(c);//照原样输出字符
- }
- else
- {
- //按格式字符输出数据
- switch(*++fmt)
- {
- case 'd':
- sprintf(buf,"%d",*((int*)pArg));
- pArg += sizeof(int); //等价于原来的va_arg
- break;
- case 'x':
- sprintf(buf,"%x",*((int*)pArg));
- pArg += sizeof(int); //等价于原来的va_arg
- break;
- case 'f':
- sprintf(buf,"%f",*((float*)pArg));
- pArg += sizeof(float); //等价于原来的va_arg
- default:
- break;
- }
- uart3_send_string((const uint8_t *)buf);
- }
- ++fmt;
- }while (*fmt != '\0');
- pArg = (void*)0; //等价于va_end
- return;
- }
复制代码 在主函数中测试一下,输入如下代码:- int main(void)
- { uint32_t i=0;
- LED_GPIO_Config();
- while (1)
- {
- debug("hello,I am xiaonong! This is line %d\r\n",++i);
- delay_ms(500);
- LED1(OFF);
- delay_ms(500);
- LED1(ON);
- }
- }
复制代码 按上面是下载方法下载到平板将会在串口输出如下:
![](http://attach://110810.jpg)
因为板子上面的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键自动重新启动,比较方便调试。
![](http://attach://110848.jpg)
每个按键旁边都有一个tp焊盘,飞线很方便。
![](http://attach://110849.jpg)
电源键飞线。
接好两个飞线以后,把调试的FPC通过触摸笔那个插槽引出,将屏幕安装上,机器装好。
![](http://attach://110850.jpg)
按下home键会进行复位重启,可以很方便的调试了。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|