ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:23.75KB ,
资源ID:7029534      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7029534.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ZigBee学习之6无线电2.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ZigBee学习之6无线电2.docx

1、ZigBee学习之6无线电2#1楼主:【原创】ZigBee学习之6无线电2文章发表于:2010-02-05 11:17今天把TI的例子程序里的基本RF看了下,有的地方还没有完全看懂,发上来和大家分享一下/* Filename: basic_rf.c Description: Basic RF library */ /* INCLUDES*/hal_int.h包含了控制中断的宏#include hal_int.h/ Using halMcuWaitUs(),hal_mcu.h中是一些延时函数#include hal_mcu.h /通道编程的宏,以及硬件RF初始化,SECURITY_CCM宏是用来

2、控制安全MAC的#include hal_rf.h#ifdef SECURITY_CCM#include hal_rf_security.h#endif /basic_rf.h中定义了RF配置用的数据结构#include basic_rf.h#ifdef SECURITY_CCM#include basic_rf_security.h#endif #include util.h / Using min()#include string.h /* CONSTANTS AND DEFINES*/ / Packet and packet part lengths#define PKT_LEN_MIC

3、 8#define PKT_LEN_SEC PKT_LEN_UNSEC + PKT_LEN_MIC#define PKT_LEN_AUTH 8#define PKT_LEN_ENCR 24 / Packet overhead (frame control field, sequence number, PAN ID,/ destination and source) + (footer)/ Note that the length byte itself is not included included in the packet length/MPDU的长度宏,(2字节幀控制域 + 1字节数

4、据序列号 + 2字节PAN ID + 2字节目标地址 + 2字节源地址 + 2字节MAC尾)#define BASIC_RF_PACKET_OVERHEAD_SIZE (2 + 1 + 2 + 2 + 2) + (2)/MPDU最大有效载荷的长度(利用FIFO只有128字节空间),BASIC_RF_AUX_HDR_LENGTH 和 BASIC_RF_LEN_MIC是辅助安全头宏定义的长度分别是5和8,可以将其设置为0,即不具备安全功能#define BASIC_RF_MAX_PAYLOAD_SIZE (127 - BASIC_RF_PACKET_OVERHEAD_SIZE - BASIC_RF

5、_AUX_HDR_LENGTH - BASIC_RF_LEN_MIC)/应答帧的长度宏(2字节帧首界定符 + 1字节数据序列号 + 2字节帧校验序列),不包括帧长度域#define BASIC_RF_ACK_PACKET_SIZE 5/MAC帧尾的长度宏#define BASIC_RF_FOOTER_SIZE 2#define BASIC_RF_HDR_SIZE 10 / The time it takes for the acknowledgment packet to be received after the/ data packet has been transmitted.#defi

6、ne BASIC_RF_ACK_DURATION (0.5 * 32 * 2 * (4 + 1) + (1) + (2 + 1) + (2)#define BASIC_RF_SYMBOL_DURATION (32 * 0.5) / The length byte#define BASIC_RF_PLD_LEN_MASK 0x7F /帧控制域/帧类型子域: 000 信标帧/ 001 数据帧/ 010 应答帧/ 011 MAC命令/ 100110 保留/安全允许子域:0 帧无安全保护/ 1 帧采用安全保护/帧待定子域: 0 传输没有附加数据的帧/ 1 当前传输后有附加的数据要发送 /应答请求子域:

7、 0 不需要接收器发送应答帧/ 1 需要接收器发送应答帧/内部PAN子域:决定MAC帧是在内部还是在其他PAN之间发送/ 0 如果目的地址和源地址都存在帧将包括目标和源PAN标志域/ 1 如果目的地址和源地址都存在帧不包括源PAN标志域 /目的地址模式子域:若为0,并且帧类型没有指定这是个应答帧或信标帧且源地址域非0,则暗含此帧发送到PAN协调器将其PAN标志作为源PAN标志域 /源地址模式子域:若为0,且帧类型没有指定这是个应答帧或信标帧,目的地址不为0,则暗含此帧来自PAN协调器,用其PAN标志作为目的PAN标志域 /00 PAN标志器且地址域未提交/01 保留/10 地址域包含16位的短

8、地址/11 地址域包含64位的扩展地址/ Frame control field/16位短地址模式,数据帧,没有安全保护#define BASIC_RF_FCF_NOACK 0x8841#define BASIC_RF_FCF_ACK 0x8861#define BASIC_RF_FCF_ACK_BM 0x0020#define BASIC_RF_FCF_BM (BASIC_RF_FCF_ACK_BM)#define BASIC_RF_SEC_ENABLED_FCF_BM 0x0008 / Frame control field LSB#define BASIC_RF_FCF_NOACK_L

9、LO_UINT16(BASIC_RF_FCF_NOACK)#define BASIC_RF_FCF_ACK_L LO_UINT16(BASIC_RF_FCF_ACK)#define BASIC_RF_FCF_ACK_BM_L LO_UINT16(BASIC_RF_FCF_ACK_BM)#define BASIC_RF_FCF_BM_L LO_UINT16(BASIC_RF_FCF_BM)#define BASIC_RF_SEC_ENABLED_FCF_BM_L LO_UINT16(BASIC_RF_SEC_ENABLED_FCF_BM) / Auxiliary Security header#

10、define BASIC_RF_AUX_HDR_LENGTH 5#define BASIC_RF_LEN_AUTH BASIC_RF_PACKET_OVERHEAD_SIZE + BASIC_RF_AUX_HDR_LENGTH - BASIC_RF_FOOTER_SIZE#define BASIC_RF_SECURITY_M 2#define BASIC_RF_LEN_MIC 8#ifdef SECURITY_CCM#undef BASIC_RF_HDR_SIZE#define BASIC_RF_HDR_SIZE 15#endif / Footer#define BASIC_RF_CRC_OK

11、_BM 0x80 /* TYPEDEFS*/ The receive structtypedef struct uint8 seqNumber; uint16 srcAddr; uint16 srcPanId; int8 length; uint8* pPayload; uint8 ackRequest; int8 rssi; volatile uint8 isReady; uint8 status; basicRfRxInfo_t; / Tx statetypedef struct uint8 txSeqNumber; volatile uint8 ackReceived; uint8 re

12、ceiveOn; uint32 frameCounter; basicRfTxState_t; /兼容IEEE 802.15.4 的MHR(MAC头)(2字节帧控制 + 1字节数据序列号 + 020字节地址信息)/ Basic RF packet header (IEEE 802.15.4)typedef struct uint8 packetLength; uint8 fcf0; / Frame control field LSB uint8 fcf1; / Frame control field MSB uint8 seqNumber; uint16 panId; uint16 destA

13、ddr; uint16 srcAddr; #ifdef SECURITY_CCM uint8 securityControl; uint8 frameCounter4; #endif basicRfPktHdr_t; /* LOCAL VARIABLES*/static basicRfRxInfo_t rxi= 0xFF ; / Make sure sequence numbers arestatic basicRfTxState_t txState= 0x00 ; / initialised and distinct. static basicRfCfg_t* pConfig;static

14、uint8 txMpduBASIC_RF_MAX_PAYLOAD_SIZE+BASIC_RF_PACKET_OVERHEAD_SIZE+1;static uint8 rxMpdu128; /* GLOBAL VARIABLES*/ /* LOCAL FUNCTIONS*/ /* fn basicRfBuildHeader* brief Builds packet header according to IEEE 802.15.4 frame format* param buffer - Pointer to buffer to write the header* destAddr - dest

15、ination short address* payloadLength - length of higher layer payload* return uint8 - length of header*/构造兼容IEEE802.15.4 的帧头static uint8 basicRfBuildHeader(uint8* buffer, uint16 destAddr, uint8 payloadLength) /声明一个指向MAC帧头结构的指针 basicRfPktHdr_t *pHdr; uint16 fcf; pHdr= (basicRfPktHdr_t*)buffer; /paylo

16、adLength为有效载荷的长度,即要发送的数据的长度 / Populate packet header pHdr-packetLength = payloadLength + BASIC_RF_PACKET_OVERHEAD_SIZE; /pConfig为基本配置数据结构 /*typedef struct uint16 myAddr; uint16 panId; uint8 channel; uint8 ackRequest; basicRfCfg_t; */ /pHdr-frameControlField = pConfig-ackRequest ? BASIC_RF_FCF_ACK :

17、BASIC_RF_FCF_NOACK; fcf= pConfig-ackRequest ? BASIC_RF_FCF_ACK : BASIC_RF_FCF_NOACK; /分别得到16位数的低8位和高8位 /#define HI_UINT16(a) (uint16)(a) 8) & 0xFF) /#define LO_UINT16(a) (uint16)(a) & 0xFF) pHdr-fcf0 = LO_UINT16(fcf); pHdr-fcf1 = HI_UINT16(fcf); /得到数据序列 pHdr-seqNumber= txState.txSeqNumber; pHdr-panI

18、d= pConfig-panId; pHdr-destAddr= destAddr; pHdr-srcAddr= pConfig-myAddr; #ifdef SECURITY_CCM / Add security to FCF, length and security header pHdr-fcf0 |= BASIC_RF_SEC_ENABLED_FCF_BM_L; pHdr-packetLength += PKT_LEN_MIC; pHdr-packetLength += BASIC_RF_AUX_HDR_LENGTH; pHdr-securityControl= SECURITY_CO

19、NTROL; pHdr-frameCounter0= LO_UINT16(LO_UINT32(txState.frameCounter); pHdr-frameCounter1= HI_UINT16(LO_UINT32(txState.frameCounter); pHdr-frameCounter2= LO_UINT16(HI_UINT32(txState.frameCounter); pHdr-frameCounter3= HI_UINT16(HI_UINT32(txState.frameCounter); #endif / Make sure bytefields are network

20、 byte order /这里把大的字节放到了前面,但有不是完全按从大到小的顺序排列字节,不知道为什么? UINT16_HTON(pHdr-panId); UINT16_HTON(pHdr-destAddr); UINT16_HTON(pHdr-srcAddr); /1字节长度,2字节FCF,1字节序列,2字节PanID,2字节目的地址,2字节源地址=10 return BASIC_RF_HDR_SIZE; /* fn basicRfBuildMpdu* brief Builds mpdu (MAC header + payload) according to IEEE 802.15.4* f

21、rame format* param destAddr - Destination short address* pPayload - pointer to buffer with payload* payloadLength - length of payload buffer* return uint8 - length of mpdu*/构造MPDUstatic uint8 basicRfBuildMpdu(uint16 destAddr, uint8* pPayload, uint8 payloadLength) uint8 hdrLength, n; /txMpdu是定义txMpdu

22、BASIC_RF_MAX_PAYLOAD_SIZE+BASIC_RF_PACKET_OVERHEAD_SIZE+1 hdrLength = basicRfBuildHeader(txMpdu, destAddr, payloadLength); /将有效载荷数据放入MPDU单元中 for(n=0;n0) *pData+= RFD; length-; */ /读取MPDU的长度 / Read payload length. halRfReadRxBuf(&pHdr-packetLength,1); /指定MPDU的长度字节的高位默认固定为0,所以去掉高位,得到长度真实值 pHdr-packetL

23、ength &= BASIC_RF_PLD_LEN_MASK; / Ignore MSB / Is this an acknowledgment packet? / Only ack packets may be 5 bytes in total. if (pHdr-packetLength = BASIC_RF_ACK_PACKET_SIZE) /如果只有5个字节长度,则此帧为应答帧 / Read the packet halRfReadRxBuf(&rxMpdu1, pHdr-packetLength); / Make sure byte fields are changed from n

24、etwork to host byte order UINT16_NTOH(pHdr-panId); UINT16_NTOH(pHdr-destAddr); UINT16_NTOH(pHdr-srcAddr); #ifdef SECURITY_CCM UINT32_NTOH(pHdr-frameCounter); #endif rxi.ackRequest = !(pHdr-fcf0 & BASIC_RF_FCF_ACK_BM_L); /条过RSSI指到CRC校验 / Read the status word and check for CRC OK pStatusWord= rxMpdu + 4; / Indicate the successful ACK reception if CRC and sequence number OK

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1