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文件中,好像和中断有关。
文章评论(0条评论)
登录后参与讨论