我通过Arduino创建了一个LoRa转USB通道,以便将其用作开发目的的临时网关。因此,我需要以某种方式知道包括PHY标头的LoRa数据包有多大,以便确定我的软件读取和发送USB顶部数据所需的时间。

架构如下:



因此,PC /笔记本电脑将需要“知道” LoRa数据包的大小,以便不通过USB接收无数个数字。字节。

评论

顺便说一句:默认情况下,LMiC仅支持最大51或52字节的有效负载,请参见github.com/matthijskooijman/arduino-lmic/issues/100,而某些提供商(如荷兰KPN)仍然只允许51字节:zakelijkforum.kpn .com / lora-forum-16 /…在某种程度上,这还可以:如果节点需要支持SF12,则也不应在更好的条件下发送更多消息。

#1 楼


包含PHY标头的LoRa数据包有多大?


我假设您的意思是MAC标头?在一些LoRa芯片为您解调了LoRa无线电信号之后,它将为您提供LoRa PHY有效负载。对于LoRaWAN上行链路,此类PHY有效负载包含MAC报头,MAC有效负载和MIC。

对于1.0.x,经验法则似乎是LoRaWAN数据包至少比应用程序有效负载大13个字节。 :


我认为通常至少13 [MHDR(1)+ DevAddr(4)+ FCtrl(1)+ FCnt(2)+ Fport(1)+ MIC(4)]在没有选项的数据包中


最大应用程序有效负载取决于所选的数据速率。如果一个节点应该能够在最差的条件下运行,则应该假定最差的数据速率SF12,其中该节点发送的字节数不应超过51个字节。 (在最佳条件下,SF7可能为222字节。)我认为,这还取决于区域。 (而且,当LoRaWAN节点不使用LoRa,而使用FSK时,情况可能会更好。)

因此,对于您的用例,我将尽量不依赖于USB的最大长度。而是:


您可以使用Base64轻松地将二进制LoRaWAN数据包转换为纯文本。然后,您可以通过USB发送此类文本,并以换行符或NULL字符终止该文本,以便在USB消息完成时通知您的接收者。如果选择的分隔符不在Base64字符集中,那么您甚至可以在该文本行中发送其他元数据。例如,网关和服务器之间的Semtech UDP协议使用JSON文本消息,这也允许您传递其他元数据。在JSON文本中,二进制LoRaWAN数据包也使用Base64编码。如果JSON文本的格式很漂亮,以包括换行符,那么您仍然可以使用NULL字符终止此类文本消息,并且不会混淆接收者。


评论


根据LoRaWAN规范V1.0.X,Fport字段是可选的,因此最小长度实际上是12个字节

– RoKK
19年2月21日在8:59

是的,@ RoKK,如果没有应用程序有效负载。但是,如果有应用程序有效负载,则必须使用FPort,因此任何应用程序有效负载始终至少要添加13个字节。 (可能还有FOpts中的一些MAC命令。此外,这13个字节也不适用于OTAA连接。)

– Arjan
19年2月21日在9:11