官方程序的逻辑是,主设备发送PING给从设备,从设备回复PONG给主设备,一直重复这个过程。在官方程序中,每次发送PING(PONG)都发送了32字节的数据,但是实际上PING(PONG)只需要4个字节,剩下28个字节都是0。
现在需要将几十K的数据发送给从设备。
软件逻辑是,从设备收到PING,发送PONG给主设备,主设备收到PONG开始数据收发过程。主设备每发送一个数据包,就会进入接收模式,直到接收到下一个pong。从设备接收到数据,就发送一个pong给主设备。
官方程序设定最大有效负载长度为256字节 函数原型void ( *SetMaxPayloadLength )( RadioModems_t modem, uint8_t max );
第一次实验,每次发送8字节数据,代码运行成功,耗时2.5小时
第二次实验,每次发送32字节数据,代码运行成功,耗时0.5小时
第三次实验,每次发送64字节数据,代码运行结束,数据有丢失
第四次实验,每次发送40字节数据,代码运行结束,数据有丢失
发现只要超过官方例程的32字节就会有数据丢失,上位机软件会打印IRQ_CRC_ERROR,这个信息好像是硬件中断函数打印的,但是我没找到中断回调函数在哪
//设置发送参数
Radio.SetTxConfig(MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,//模式LoRa,发送功率14dbm,0 FSK模式下频移参数,信号带宽124KHz
LORA_SPREADING_FACTOR, LORA_CODINGRATE, //数据传输速率1024bps,编码率
LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON, //前导长度8、是否固定数据包长度(否)
true, 0, 0, LORA_IQ_INVERSION_ON, TX_TIMEOUT_VALUE);//是否CRC校验(是),是否频率跳变,频率跳变周期,IQ采样反转大多数情况为0,发送超时时间3秒
//设置接收参数
Radio.SetRxConfig(MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, //模式,信号带宽,数据传输速率
LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH, //编码率,0设置FSK的AFC自动频率控制,前导长度
LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, //超时符号数,是否固定数据包长度
0, true, 0, 0, LORA_IQ_INVERSION_ON, true); //0若为固定数据包则有这个参数设置长度,CRC校验true,是否频率跳变0,频率跳变周期0,IQ采样反转大多数情况为0,true
Radio.SetMaxPayloadLength(MODEM_LORA, MAX_APP_BUFFER_SIZE); //设置最大负载长度255
|