历史上的今天
返回首页

历史上的今天

今天是:2024年12月17日(星期二)

正在发生

2020年12月17日 | CC1100的功能特性与在TinyOS环境下的CC1100驱动程序介绍

2020-12-17 来源:elecfans

1 概述

无线传感器网络(Wireless Sensor Network, WSN)是当前信息技术领域的热点研究方向之一,它综合了传感器技术、遥测技术、嵌入式计算技术、分布式信息处理技术和无线通信技术,是一种通过无线通信方式形成的多跳自组织网络系统。无线传感器网络由大量体积小、功耗低、具有无线通信、传感和数据处理功能的传感器节点组成。节点是无线传感器网络的基本单元,它一般由传感器模块(传感器、A/D转换器)、处理器模块(微处理器、存储器)、无线通信模块(无线收发器)和能量供应模块(电池)组成。


本文研发的无线传感器网络节点选用Chipcon公司低功耗低成本单片收发芯片CC1100作为无线通信模块,将其通过SPI串行总线技术与MCU(MSP430F1611)相连。采用加州大学伯克利分校人员专门为无线传感器网络开发的嵌入式操作系统TinyOS作为软件平台。


2 设计需求分析

无线传感器网络由大量资源受限的节点组成。资源受限的特点决定了在选择无线收发芯片以及开发驱动时,必须满足低功耗,并实现收发分组的基本功能。节点对CC1100的主要功能要求如下:发送时把MCU递交过来的数据封装成帧并实现分组发送;接收时完成分组接收后把数据提取出来交给MCU.无线传感器网络中节点发送一个比特所消耗的能量约等于其处理器进行1 000次32位加法运算消耗的能量[1],因此,为了减少分组碰撞,降低因分组重发而消耗的能量,CC1100应实现发送数据之前的信道监听即载波监听功能。为了进一步降低能耗,节点在没有数据发送或接收时应置于休眠状态,并可以按指定方式激活,即具有休眠唤醒功能。具体设计需求如下:

(1)收发分组。这是CC1100需要实现的主要功能,CC1100在发送数据前,要完成数据的分组封装,CC1100无线通信协议的分组格式如下:

其中,前导码是一连串的10101010?,其数量为8n个比特,n的大小由用户编程决定。同步字的内容和数量均可编程确定,长度为数据域的字节数,数据域内容为MCU递交的数据,CRC校验可以编程选择使用,灰色部分均可编程选择。

(2)载波监听。由于无线传感器中节点数量众多,节点密度大,如果不加控制就互相通信,必然会发生分组碰撞。为了减少碰撞机会,提高节点能量效率,本文通过CC1100的电平检测功能实现载波监听。CC1100提供了2种载波监听方式:绝对门限监听和相对门限监听。绝对门限监听是当信道电平超过某个指定数值时通知信道忙,相对门限监听是当信道电平增加量超过指定倍数(如6 dB)时,检测为信道忙。绝对门限监听需要大量信道特性统计来设置绝对门限电平值,相对门限监听方式可以避免上述工作且能适应时变噪声场合。在本文项目中采用相对门限来监听信道,效果很好。

(3)睡眠唤醒。由于无线传感器节点能量受限,因此在不必要的情况下,应尽量减少节点上硬件资源的活动时间,在多数情况下,无线模块应处于休眠状态。CC1100通过发送一个命令控制器可以关掉无线收发模块。类似地,发送一个唤醒命令控制器可以激活该模块。实现驱动时,笔者把上述命令封装在一个接口中,供上层调用。


3 硬件连接关系

节点上MCU与无线收发模块的硬件连接关系如图1所示。左侧是MCU,采用美国Texas Instruments(TI)公司生产的超低功耗微处理器MSP430F1611,它是一个16 位、具有精简指令集(RISC)、超低功耗的混合型单片机,其片上集成了丰富的外围模块,包括看门狗、定时器、硬件乘法器、A/D转换器等,根据其运行打开的模块数目不同(即采用不同的工作模式),芯片的功耗有着显着差异,除了正常的活动模式外,它具有5种低功耗模式(LPM0~LPM4),在等待方式下,其电流仅为0.7 μA,在深睡眠情况下,最低电流仅为0.1 μA [2].右侧是无线收发模块CC1100,它是Chipcon公司采用0.18 μm CMOS技术生产的低功耗多频段无线收发芯片,具有尺寸小、功耗低、灵敏度高、独立的64字节收发缓存(TXFIFO/ RXFIFO)、数字化接收信号强度输出(RSSI)等特点,并有前向纠错和数据白化等硬件处理模块。它还具有3个通用数字输出引脚GDOx(x=1~3),在实际应用时,可以通过寄存器配置让它们为上层实时提供信道或分组状态[3].在硬件平台上,CC1100的4个SPI通信管脚(SI, SO, SCLK, CSn)分别连接到相应MSP430F1611的4个SPI串行通信引脚,即MOSI, MISO, UCLK, MCLK上。通过这4根线,处理器可以对CC1100进行寄存器读写和功能配置。由于CC1100只是从机模式,因此处理器只能采用主机模式。另外,本项目采用了其中2个通用数字输出引脚GDO0和GDO2,分别用来实现分组发送指示和载波监听指示。

CC1100的功能特性与在TinyOS环境下的CC1100驱动程序介绍

图1 CC1100与MSP430F1611的硬件连接关系


CC1100与MSP430F1611通信时,时钟源由MSP430F1611提供,经过配置处理器寄存器,本文采用其外围时钟模块的系统子时钟SMCLK.它们的通信方式为SPI串行通信方式。SPI通信是一种高速、全双工的同步总线通信技术,其硬件功能很强大,仅通过4个管脚,就可以在主机时钟源SCLK节拍的控制下,通过2个双向移位寄存器实现CC1100与MSP430F1611的串行数据交换。CSn引脚主要用来控制数据通信的同步性,在CC1100和MSP430F1611通信期间,要始终保证CSn引脚电平为低。


4 软件平台

TinyOS操作系统是目前无线传感器网络中应用较广泛的操作系统,它是UC Berkeley开发的源代码开放式操作系统,专门为无线传感网络设计。它基于组件的架构方式,可以快速实现各种应用。此外,其轻量级线程技术、事件驱动模式、主动消息通信技术等思想极大提高了节点的资源利用率[2].TinyOS环境下编程语言为NesC,NesC是对C语言的扩展,扩展的目的是将C的模块化思想与TinyOS的事件驱动机制结合起来。为了支持组件化编程模式,NesC语言引入了接口和组件的概念。接口是一系统功能类似或相关的函数声明,根据不同方向命名为命令或事件,具体实现在提供或使用该接口的组件中。组件包括配件和模块,配件负责把不同组件通过接口连接起来,模块提供程序所需的代码实现。组件中的接口是双向的,它给出使用者可以调用的命令或必须处理的事件。不同组件之间通过接口静态连接,以提高程序的运行效率,增加程序的鲁棒性。NesC的并发模型是基于"运行到结束"的任务实现的,程序运行任务时,硬件中断服务程序能抢占任务,且在中断服务程序中也可能出现其他中断服务程序来抢占的现象,甚至出现多级中断嵌套。但由于中断处理程序只做少量工作,会很快执行完毕,因此没有提交成功的任务不会被无限期挂起。


5 CC1100驱动实现

在TinyOS中,硬件抽象体系结构(Hardware Abstract Architecture, HAA)一般有3个不同的抽象层次,根据不同需要,可以灵活地实现不同芯片、不同平台、甚至不同系统间的程序调用。但考虑到代码数量、程序复杂度、节点资源等因素,在设计CC1100驱动程序时,需要借鉴TinyOS 3层抽象体系外,并兼顾节点存储能力和运算能力。


5.1 TinyOS中的硬件抽象体系结构

TinyOS 中的硬件抽象体系结构一般分为3层,如图2所示,分别为硬件表示层(HPL)、硬件抽象层(HAL)和硬件接口层(HIL)[4].通过对硬件平台进行不同层次的抽象,可以在系统开发中有区别地向上层屏蔽硬件特征,从而实现在不同程度上隔离上层组件和物理平台,便于程序移植。在功能上,硬件抽象组件相当于底层硬件的驱动程序,上层组件通过硬件抽象组件提供的接口进行调用。

CC1100的功能特性与在TinyOS环境下的CC1100驱动程序介绍

图2 TinyOS 中的硬件抽象体系结构


在图2中,硬件表示层通过存储器或端口映射对硬件平台上某个模块(如通信模块、存储模块等)进行直接操作与控制,对上层屏蔽硬件特征,实现软/硬件的分离,从而实现该模块硬件功能的软件语言表达。硬件接口层在硬件抽象层的基础上实现对该硬件的功能操作,这是该体系结构的核心,通过调用该层接口,可以实现平台上某个模块提供的全部功能。硬件接口层是针对平台上不同芯片(如一个硬件平台上的2个通信模块CC1100和CC2420)的更高层次的抽象,它通过不同硬件抽象层提供的接口,把平台上不同芯片的组件封装成与底层组件芯片甚至硬件芯片无关的接口供高层调用,从而屏蔽不同芯片的差异,实现了兼容性较强的跨平台抽象体 系结构。


5.2 CC1100驱动体系结构

在设计驱动程序时,由于CC1100硬件功能强大并能够提供丰富的控制寄存器资源,通过对这些寄存器的配置可以实现基本功能,因此在设计时,笔者侧重于构建一个合理的组件层次结构,以便模块的修改与跨平台应用。在笔者开发的节点上只有一个通信模块CC1100,未涉及多个无线收发芯片,加上节点处理、存储能力的限制,在满足需求的前提下,本文只设计了TinyOS 硬件抽象体系3层中的下2层,从而达到缩减代码、节约能量的目的。CC1100驱动体系结构体系如图3所示。

CC1100的功能特性与在TinyOS环境下的CC1100驱动程序介绍

图3 CC1100驱动体系结构


在图3中,硬件表示层配件HPLCC1100C向上层提供了3个接口:StdControl, Chipcon, CCFIFO,模块HPLCC1100M完成对CC1100直接控制和基本功能的软件表达,实现3个接口的全部命令执行代码。硬件抽象层配件CC1100RadioC向上层提供了4个接口:StdControl, PhyState, PhyPacket和CarriSns,模块CC1100RadioM包含了CC1100全部功能的软件实现。本文结合CC1100驱动体系结构,简要介绍其主要功能,即收发分组。


HAL层的CC1100RadioM模块是物理层组件结构的高层,该模块主要实现对分组的发送与接收、对无线发送模块的状态进行控制以及载波监听功能。其中,StdControl接口主要完成无线收发模块的初始化和CC1100的启动及停止;PhyState实现CC1100的各个工作状态的切换,包括无线模块的休眠和唤醒;PhyPacket实现分组的收发,高层组件可以直接调用该接口进行数据发送或接收;CarriSns用来为上层提供载波监听功能,通过硬件引脚电平情况来判断信道忙闲状态。上述接口只是相关命令或事件的声明,其真正实现在提供这些接口的模块,即CC1100RadioM中。


HPL层的HPLCC1100M()模块实现对无线通信模块的直接控制和软件表达,实质是对CC1100各个寄存器进行读写。该模块为整个硬件平台提供了SPI同步串行通信机制,向上层提供了StdControl, Chipcon, CCFIFO接口。其中,StdControl接口完成CC1100复位并初始化底层芯片,包括SPI通信时钟源选择、波特率设置、引脚输入输出方式以及无线收发模块的射频频率、调制方式、数据速率、信号检测方式等;Chipcon接口实现控制寄存器读写操作和命令控制器的发送,以实现对CC1100的配置和控制,其实现方式是SPI串行通信,CCFIFO主要完成TXFIFO和RXFIFO的数据连续读写操作,主要是在发送或接收数据时供CC1100RadioM调用。上述接口只是相关命令或事件的声明,其真正实现在提供这些接口的模块即HPLCC1100M中。


当上层组件把需要发送的数据递交下来,并调用CC1100RadioM组件提供的接口PhyPacket中的发送命令时,CC1100RadioM会先调用HPLCC1100M中CCFIFO接口提供的写FIFO命令把要发送的数据写入发送缓存TXFIFO中,笔者使用CC1100的连续读写方式来实现。然后发送命令控制器STX使能CC1100开始发送分组,并把CC1100状态切换到发送状态。本文使用了CC1100的通用数字输出引脚GDO2,通过适当配置,该引脚电平会在CC1100发送/接收完前导码时产生上升沿跳变,在整个分组发送/接收完成后产生下降沿跳变。可以通过查询GDO2引脚电平来判断分组是否写入完毕。当发送数据写完以后,CC1100会按第2节所述的分组格式对数据进行封装,上层组件通过查询GDO2引脚确定分组发送完毕后,根据需要再发送命令控制器把CC1100置于空闲或休眠状态。


接收分组时节点会先检测信道中的前导码,如果按指定方式检测到指定数量的前导码,CC1100的GDO2引脚电平会产生一个上升沿跳变,上层组件得知引脚跳变后,会把CC1100切换到接收状态并调用HPLCC1100M组件中的读取接收缓存RXFIFO命令,然后开始读取接收缓存,读取完CC1100接收缓存中的分组并把有用数据提取出来交给上层后,可以根据需要把它置于空闲或休眠状态。在程序实现过程中,为了节约节点能源,减少MSP430F1611的活动时间,笔者没有使用等待查询方式而采用硬件中断方式,即使用了GDO2引脚的电平跳变特点,当检测到前导码时,触发一个MSP430F1611端口中断,在中断服务程序中进行了读取接收缓存RXFIFO等操作,从而让MSP430F1611更多时间处于休眠状态,达到降低功耗的目的。


6 结束语

无线传感器网络节点能量受限的特点决定了本文选择和开发软硬件的思路及方法。出于低功耗考虑,笔者选择CC1100芯片,给出使用NesC语言在TinyOS环境下设计的基于SPI串行总线的CC1100驱动程序。程序在本文节点上的实际应用说明该程序实现了基于MSP430F1611平台的无线收发功能以及分组的正常收发。大量测试结果表明,节点运行稳定,具备载波监听、休眠唤醒等相关功能。

推荐阅读

史海拾趣

ASSMANN WSW components公司的发展小趣事

随着公司规模的扩大和产品质量的提升,ASSMANN WSW components公司开始积极拓展全球市场。通过与全球知名企业的合作,公司成功打入国际市场,产品远销海外。同时,公司还积极参加国际电子展会和交流活动,与全球同行建立了广泛的合作关系。这些举措不仅提升了ASSMANN WSW的品牌知名度和影响力,还为公司带来了更多的商业机会和发展空间。

Celduc Relais公司的发展小趣事

Celduc Relais公司注重企业文化的建设,倡导创新、协作、责任和卓越的核心价值观。公司通过举办各类文化活动、培训和学习等方式,提升员工的凝聚力和归属感。同时,公司还建立了完善的激励机制,鼓励员工积极创新、追求卓越。这一举措为公司的发展提供了强大的文化支撑和人才保障。

这五个故事只是Celduc Relais公司发展历程中的冰山一角,但它们足以展现出公司在技术创新、市场拓展、质量管理、环保理念和企业文化建设等方面的努力和成就。正是这些因素的共同作用,使得Celduc Relais公司在电子行业中脱颖而出,成为一家备受尊敬的企业。

Bourns公司的发展小趣事

Bourns公司一直以来都注重技术研发与创新。不论是自行研发的产品,还是通过并购或特许所取得的技术,Bourns都持续投入于开发新产品。例如,Bourns推出的最新型旋转式电位器,具备绝缘塑料轴、高额定旋转周期以及宽泛的工作温度范围等特性,这些创新产品在市场上取得了良好的反响。

兆易创新(GigaDevice)公司的发展小趣事

随着公司的不断发展,Bourns在1952年取得了世界上第一个可调式电阻的专利,即TrimpotR。这一技术突破标志着Bourns在电子元器件领域的领先地位,也为公司的产品线增添了核心竞争力。可调电阻的广泛应用推动了Bourns在电子行业的快速发展。

Coors Components Inc公司的发展小趣事

在某个关键项目的研发过程中,Coors Components Inc公司遇到了前所未有的技术难题。然而,公司的研发团队并没有因此而气馁,他们通过加强内部沟通、分享经验以及相互支持,最终成功攻克了难关。这一经历不仅增强了团队的凝聚力,也为公司培养了一批忠诚且能力出众的员工。

FOCI Fiber Optic Communications Inc公司的发展小趣事

在某个关键项目的研发过程中,Coors Components Inc公司遇到了前所未有的技术难题。然而,公司的研发团队并没有因此而气馁,他们通过加强内部沟通、分享经验以及相互支持,最终成功攻克了难关。这一经历不仅增强了团队的凝聚力,也为公司培养了一批忠诚且能力出众的员工。

问答坊 | AI 解惑

汽车电子稳定程序ESP技术现状扫描

  汽车安全性能的提升是汽车业界不断的追求,秉承这一理念,ABS在经过普及阶段以后,目前已进入了产品升级阶段。业界的一致共识是ABS(防抱死制动系统)将向ESP(电子稳定性控制系统)演化。  市场上ESP已在拓展自己的领地。在欧洲,2005年大约 ...…

查看全部问答>

发动机ECU诊断测试信号转接器

图片是64通道的博世ECU信号转接器,还有81通道,90通道的,121通道,160通道,240通道的,请问各位大侠有用这个东西吗?是用来专门测试ECU信号和诊断用的…

查看全部问答>

每次面试都被问到模电和数电

1.今天被问到Vcc和Vdd代表什么意思?画一个放大电路; 2.真是郁闷啊,每次面试都被问到相关的魔电,但都不会啊,之前就学得很差劲。 3.有什么更好的办法短时间内学好魔电吗?…

查看全部问答>

wince4.2系统启动时停在了SchedInit函数中

各位,我使用wince4.2+s3c2440,使用的是大页FLash,烧些完NK后,系统启动停在了Private下的SchedInit函数中,不知道是什么原因?…

查看全部问答>

2440如何关闭LCD背光!

手册里面说LCD_PWR是背光控制信号,根据spec里的 STN/TFT: LCD_PWREN output signal enable/disable. 0 = Disable PWREN signal 1 = Enable PWREN signal 那么我是不是把LCDCON5中的PWREN 位置低就等关闭背光啊?我试了不行啊,实在不懂到底怎么控 ...…

查看全部问答>

uboot编译问题,那位大侠帮着看看。

[root@localhost u-boot-1.3.4]# make fft2410_config Configuring for fft2410 board... [root@localhost u-boot-1.3.4]# make Generating include/autoconf.mk.dep for dir in tools examples api_examples ; do make -C $dir _depend ; done ...…

查看全部问答>

pci bios 开发的问题

各位大侠,最近在开发pci bios,基本功能没有问题,但是就是在执行完pci bios 后无法返回到调用它的主板bios,查了一些资料,但都说直接retf就可以了, 但是我试过不行。我是在c中嵌入的汇编,用的open watcom的编译器。不知道那位 大侠有这方面 ...…

查看全部问答>

二手开发板,IC呆料免费交易平台www.dz-dailiao.cn,www.电子呆料.cn

二手开发板,IC呆料免费交易平台www.dz-dailiao.cn,www.电子呆料.cn…

查看全部问答>

Windows CE 5.0 Emulator模拟器为什么运行不了CE的程序呢?老提示“'App'is not a valid Windows CE appli

各位好! 我用VS2005写了一个WinCE的程序app.exe, 在Windows CE 5.0的PocketPC上可以正常运行,在Windows Mobile 系统上都可以正常运行。 由于公司参加展览,所以需要把这个程序放在Notebook上使用, 我先在Microsoft网站上下载了Windows CE E ...…

查看全部问答>

STM32定时器1死区时间是怎么算出来的TIM1_BDTR

STM32定时器1死区时间是怎么算出来的TIM1_BDTR. 在数据手册STM32F10XX第249页关于死区说明如下. UTG[7:0]: 死区发生器设置 (Dead-time generator setup) 位7:0 这些位定义了插入互补输出之间的死区持续时间。 假设DT表示其持续时间:  DT ...…

查看全部问答>