TinyOS2.0,节点telosb串口收发实战

串口接收数据格式
74 45 00 X1 X2 00 00 X3 00 X4 Payload(AM) F1 F2 74
 
PHY Control Field
74 -分界符,标示消息开始
45-69表示数据包无需ACK,在serial.h头文件中有定义SERIAL_PROTO_PACKET_NOACK = 69,
00-用于串口分发,AM消息默认为0,TOS_SERIAL_ACTIVE_MESSAGE_ID = 0.
 
message_header
X1 X2 -dest 目的地地址
00 00-src源地址,T2.0默认不填充该部分,所以为0
X3-length就是后面data载荷长度
00-group就是以前1.x中的TOS_AM_GROUP,不过在T2.0中注释掉了,不填充,故为0
 
data
Payload-没什么好说的,你定义的是什么传的就是什么
注意:7E->7D 5E,7D->7D 5D 和1.x没有区别还是^0x20
 
footer
F1 F2-2位的CRC校验码,尽管T2.0采用了nx_前缀结构,但在CRC的计算和表示上还和以前一样
高位在前,低位在后
 
1.0的CRC算法
uint16_t crcByte(uint16_t crc, uint8_t b)
{
  uint8_t i;
 
  crc = crc ^ b << 8;
  i = 8;
  do
    if (crc & 0x8000)
      crc = crc << 1 ^ 0x1021;
    else
      crc = crc << 1;
  while (--i);
  return crc;
}
T2.0的CRC算法
uint16_t crcByte(uint16_t crc, uint8_t b) {
  crc = (uint8_t)(crc >> 8) | (crc << 8);
  crc ^= b;
  crc ^= (uint8_t)(crc & 0xff) >> 4;
  crc ^= crc << 12;
  crc ^= (crc & 0xff) << 5;
  return crc;
}
尽管2.0的计算结果和1.x的一样,但是却提高了机器的计算速度,一个字“赞”
串口下行包格式,即PC-〉Node
 
74 45 00 X1 X2 00 00 X3 00 X4 Payload(AM) F1 F2 74            <<==PC上接收到的
 
74 44 00 00 X1 X2 00 00 X3 00 X4 Payload(AM) F1 F2 74       <<==PC发往节点的
 
两点区别:
1,PROTO由45换成了44,44=SERIAL_PROTO_PACKET_ACK,由于T2.0中只支持ACK方式的接收
2,增加了分发字段 00 ,主要是由于在SerialP的接收状态机中增加了RXSTATE_TOKEN,且在触发SerialDispatcherC时,用于分发标实,很诡异的东西。反正固定写00下面就能正确接收了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值