可能是我太笨吧,摸索了好几天,看了很长时间的代码,才懂得如何将官方的例程玩起来。。
TIVA软件的example目录下有两个例程,一个是boot_emac_flash,一个是boot_demo_emac_flash,前者是bootloader,后者是下载的示范例程。此外与串口下载一样,需要LM Flash Program这个应用程序。
首先下载自然需要知道目标板的IP地址。boot_emac_flash中使用的以太网库是UIP而非lwIP,而且它是通过BOOTP协议来获取IP地址而非DHCP,这两个东西就搞了我很长时间,虽然看懂了代码,但是IAR对的汇编的调试很烂,根本无法跟踪汇编代码,而boot_emac_flash也并没有将IP地址从串口打印出来,我跟本就拿不到启动后的IP地址。倒是可以下载一个其它的例程看到通过DHCP拿到的IP地址是多少,但是我拿不准BOOTP拿到的IP是否会和DHCP的一致。后来实在没办法,就假设拿到的IP是一致的,先下一个别的程序看看拿到的IP是多少,再将boot_emac_flash下载去,就假定它拿到的就是之前的地址。但是下载完启动后其实我是ping不通它的,我姑且也假设uIP并不实现ICMP所以ping不通。
按照串口更新的例程,此时应该是将boot_demo_emac_flash下载到0x4000处,然后按SW1按钮触发跳转到bootloader中,然后就可以通过LM Flash Program。我下载了boot_demo_emac_flash,这其实就是一个闪灯的例程,然后按了半天SW1按钮,没有反应。难道可以直接下载?打开LM Flash Program,选择ethernet更新, 填写好IP和MAC地址,点击program按钮,也是没有反应。没有办法,只能去啃boot_demo_emac_flash的代码,代码显示需要给目标板的端口9发送一个长度为16的UDP包就能触发事件跳转入bootloader模式,但是这个包是谁来发呢,我开始觉得就应该是LM Flash Program中按下program指令后由LM Flash Program来发送。我用wireshark抓了一下包,发现LM Flash Program屁都没有放一个。难道是需要我自己发?找了一个UDP发包工具按源代码的中数据包的格式构造句了一个数据包发下去,但是不知什么原因,调试有看到进入包收取的函数中,但是格式校验不通过无法跳转,好无语。
最后我把boot_demo_emac_flash擦除掉只保留boot_emac_flash,按我理解只有bootloader的情况下应该就是下载模式,此时再打开LM Flash Program点击program,却依旧没有反应,一直显示连接中。难道是要先开启LM Flash Program中的下载过程再启动bootloader?这回先打开LM Flash Program,点击program按钮进入连接状态,再给目标板上电,终于,等了一两秒后出现了下载的进度条。进度条走完就自动跳转到刚下载的程序中,跑马灯闪了起来。
总结一下,TI的官方例程中,需要通过别的例程,比如enet_lwip,查看通过DHCP所获取到的IP地址。这个IP地址在一段时间内是不会改变的。然后将boot_emac_flash下载到flash中,下载完先断电。PC端打开LM Flash Program,将刚才看到的IP地址和目标板网口的MAC地址填到对应的编辑框中,如下图所示
切换到Program页,选择要下载的程序,例如使用官方给的boot_demo_emac_flash。(注意这个例程在编译时指定起始地址为0x4000,官方例程是改好的,如果是自己的例程,对于IAR编译器,请修改*.icf文件)。然后点击program按钮,进入等待连接状态。然后给目标板上电,这个时候bootloader启动,下载过程就开始了。从wireshark的抓的包来看,下载使用的是TFTP协议,但具体实现的过程,还得继续啃bootloader的代码,不过至少这个下载是走通了,下面的再慢慢来。。。。
吐槽下TI给的例程,什么说明都没有,网上的信息也不多,有人问,但是能详细说明怎么用的没有,只能自己慢慢的一点一点的试,盲人摸象一样。也可能是我太笨吧,这两个小小的例程花了这么久的时间。。。。。