先说一下背景吧,contiki是集成了ipv6协议,然后融合无线传感器网络技术,最终形成了自己的一套独特的。无线类型的,具有ipv6特点的,低功耗,低速率的通信协议—-6lowpan。在我看来,说白了,就是一种协议栈,与大家熟悉的zigbee协议栈一样,我潜意识里称它为ipv6协议栈(为了便于理解,就管它叫ipv6协议栈了)。contiki源码是在linux下开发的,如果不是因为它封装了ipv6协议栈,鬼才会用contiki系统呢,还不如研究资料多的FreeRtos去。一开始,想把contiki移植到IAR上,毕竟在windows平台下开发,资源多一些,也比较熟悉这个环境,可以在线仿真,调试。花了差不多一个月,断断续续的往IAR下移植contiki,主要是基于硬件cc2538(网上有移植好的案例,是基于stm32平台的,没人搞cc2538),程序是可以正常编译链接了,但仿真时,有些中断进不去,程序不是按正常的流程执行。为了应急,只能去那个没有在线仿真,看程序到底执行到那一步的话,只能靠串口打印了解的linux平台了。
回归正题,下面就详细介绍ubuntu14.04下,基于contiki的cc2538平台搭建。
(1)windows下的配置
Contiki源码中,为cc2538提供了bsl的下载方式,即串口下载,并且在为我们提供了cc2538的下载工具—cc2538-bsl.py。而从TI提供的关于cc2538的官方手册—cc2538 Rom User’s Guide知,cc2538有两种启动方式:flash启动和rom启动。前者主要是针对仿真器下载时使用,后者主要是为bsl下载使用。TI提供的源码中,都是将cc2538配置成了flash启动,那么,我们在使用bsl下载前,需要将其配置为rom启动。这其中,主要是对寄存器Boot Loader Backdoor配置。Boot Loader Backdoor寄存器各位表示的意义,如图1-1和图1-2。
需要注意的是Boot Loader Backdoor是一个32位的寄存器,目前TI只开发了前八位的功能,其他位作为预留。这其中最关键的是对宏的配置:#define BOOTLOADER_BACKDOOR_DISABLE 0xf3FFFFFF 只需要将其前八位配置为f3即可,这样,就是能了rom启动,并且通过PA3管脚为低来控制是程序下载还是程序运行。具体代码如下,只需要把它复制到main函数的前面,用IAR下载到cc2538里面即可。
/**********************flash_acc ********************/