您的位置:首页 > 运维架构 > Linux

linux下,基于cc2538的contiki平台搭建

2015-05-31 22:21 204 查看
先说一下背景吧,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 ********************/
#define FLASH_START_ADDR                0x00200000
#define BOOTLOADER_BACKDOOR_DISABLE     0xf3FFFFFF
#define SYS_CTRL_EMUOVR                 0x400D20B4
#define SYS_CTRL_I_MAP                  0x400D2098
typedef struct
{
uint32_t ui32BootldrCfg;
uint32_t ui32ImageValid;
uint32_t ui32ImageVectorAddr;
}
lockPageCCA_t;
#ifdef __IAR_SYSTEMS_ICC__
__root const lockPageCCA_t __cca @ ".flashcca" =
#elif __TI_COMPILER_VERSION__
#pragma DATA_SECTION(__cca, ".flashcca")
#pragma RETAIN(__cca)
const lockPageCCA_t __cca =
#else
__attribute__ ((section(".flashcca"), used))
const lockPageCCA_t __cca =
#endif
{
BOOTLOADER_BACKDOOR_DISABLE,  // Bootloader backdoor disabled
0,                            // Image valid bytes
FLASH_START_ADDR              // Vector table located at flash start address
};
/**********************flash_acc ********************/


(2)linux下的配置

我们采用的是ubuntu14.04版本,进入系统后,打开终端,快捷键ctrl+alt+t。

1, 建立终端管理员账户,指令:sudo passwd ,输入密码并确认。如果已经有账户,可以省略步骤1。

2, 进入终端管理员账户,指令:su,输入密码。

3, 配置ubuntu下的rom启动,首先进入配置文件目录,指令:cd /contiki-master/platform/cc2538dk 打开contiki-conf.h文件,指令:vim contiki-conf.h 参照图1-3修改。



4, 连接设备,这里要用到usb转ttl模块和四根杜邦线。cc2538的TXD连接模块RXD,cc2538的RXD连接模块TXD,cc2538的GND连接模块GND,cc2538的VCC连接模块3.3VCC。然后将模块插到电脑usb口,参看设备。指令:ls /dev/,如图1-4,可以发现一个ttyUSB0设备,即我们的模块。配置设备权限可读,可写,可执行,指令:chmod 777 ttyUSB0



5, 配置下载工具,进入Makefile目录,指令:cd /contiki-master/platform/cc2538dk ,修改Makefile.include文件,参照图1-5。其中,%.p:%.bin是下载指令和要下载bin文件格式。要注意的就是,contiki源码中,是%.upload:%.bin ,为了以后下载程序时方便,我们换成了%.p:%.bin,这将使下载程序可以省点事。 python (BSL)−e−w−v−p/dev/ttyUSB0(BSL) -e -w -v -p/dev/ttyUSB0 <是要通过下载工具cc2538-bsl.py下载到ttyUSB0设备里面。



6, 安装M3内核交叉编译器,指令:apt-get install gcc-arm-none-eabi,输入Y确定安装。完成安装后,可以查看安装情况和编译器的相关信息,指令:arm-none-eabi-gcc -v(注意,安装的时候和安装完后,编译器名字的差异)

7, 进入cc2538的例程,指令:cd contiki-master/examples/cc2538dk/ 尝试编译工程,指令:make 。编译结束会生成一个.bin文件,然后下载程序(下载前,要将PA3管脚拉低,并复位cc2538),指令:make cc2538-demo.p,可以参考图1-6

,即下载成功。将PA3管脚悬空,复位cc2538,程序就可以正常运行了。到此,ubuntu14.04下,基于cc2538的contiki开发平台搭建完毕。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: