热度 10
2013-6-9 15:39
2234 次阅读|
0 个评论
2013.6.8学习radio发送数据 uint8_t Packet[] = { 0x0f, // packet length including two bytes for the CRC 0x21, // FCF - data frame type, no security, no frame pending, ack request, no intra PAN 0x08, // FCF - 16 bits short destination address, no source pan id and address 0x00, // sequence number 0x12, // destination pan id (lowest byte) 0x23, // destination pan id (highest byte) 0x02, // destination short address/node id (lowest byte) 0x22, // destination short address/node id (highest byte) 0x12, // packet data 0x34, // packet data 0x56, // packet data 0x78, // packet data 0x9A, // packet data 0xBC // packet data }; 发送数据的第一个字节表示接下来的数据长度,如果有硬件CRC,还要额外加多2字节 发送的数据要求有发送数据格式,按照MAC的帧格式来讲: | 2byte | 1byte | 0/2byte | 0/2/8byte | 0/2byte | 0/2/8byte| 变长 |2byte| | 帧控制域(FCF) | 序列号 | 目的PAN ID | 目的地址 | 源PAN ID | 源地址 |帧负载(data)| FCS| |______________|__________________ 地址域 _______________________________|_____________|______| |__________________________ MHR _________________________________________|___ MAC负载__|__MFR_| FCF的格式参照simple MAC library.pdf P12 教材中FCF设置成了0x0821,无加密,无挂起,有ACK请求,发送到另一个PAN,16位短目标地址,无源PAN ID和地址 注意FCF的高低位 CCA评估好像是用来检测该信道是否有噪声,足够传输数据,使用函数ST_RadioSetEdCcaThreshold (ed_cca_value);来设置检查的阈值,默认值-75dbm 数据发送出去之后,调用函数ST_RadioTransmitCompleteIsrCallback(StStatus status, uint32_t sfdSentTime, boolean framePending)来检查发送情况,该函数在transmit.c文件中,已经配置好了,status是返回的状态,sfdSentTime不知道是干嘛的,还要在检查下,boolean framePending是CFC中framePending位,表示是否还有额外的数据要发送 SFD是PHY格式中的一个字节:The SFD field (start-of-frame delimiter) is an 8-bit field indicating the end of the synchronization preamble and the start of the packet data. The SFD must be equal to 10100111b. 但还是不明白是干嘛用的,必须通过函数ST_RadioEnableSfdSentNotification(TRUE);开启SFD事件功能,ST_RadioSfdSentIsrCallback(uint32_t sfdSentTime)函数包含在transmit.c文件中,好像和中断有关。