|
官方程序的邏輯是,主設(shè)備發(fā)送PING給從設(shè)備,從設(shè)備回復(fù)PONG給主設(shè)備,一直重復(fù)這個過程。在官方程序中,每次發(fā)送PING(PONG)都發(fā)送了32字節(jié)的數(shù)據(jù),但是實(shí)際上PING(PONG)只需要4個字節(jié),剩下28個字節(jié)都是0。
現(xiàn)在需要將幾十K的數(shù)據(jù)發(fā)送給從設(shè)備。
軟件邏輯是,從設(shè)備收到PING,發(fā)送PONG給主設(shè)備,主設(shè)備收到PONG開始數(shù)據(jù)收發(fā)過程。主設(shè)備每發(fā)送一個數(shù)據(jù)包,就會進(jìn)入接收模式,直到接收到下一個pong。從設(shè)備接收到數(shù)據(jù),就發(fā)送一個pong給主設(shè)備。
官方程序設(shè)定最大有效負(fù)載長度為256字節(jié) 函數(shù)原型void ( *SetMaxPayloadLength )( RadioModems_t modem, uint8_t max );
第一次實(shí)驗(yàn),每次發(fā)送8字節(jié)數(shù)據(jù),代碼運(yùn)行成功,耗時2.5小時
第二次實(shí)驗(yàn),每次發(fā)送32字節(jié)數(shù)據(jù),代碼運(yùn)行成功,耗時0.5小時
第三次實(shí)驗(yàn),每次發(fā)送64字節(jié)數(shù)據(jù),代碼運(yùn)行結(jié)束,數(shù)據(jù)有丟失
第四次實(shí)驗(yàn),每次發(fā)送40字節(jié)數(shù)據(jù),代碼運(yùn)行結(jié)束,數(shù)據(jù)有丟失
發(fā)現(xiàn)只要超過官方例程的32字節(jié)就會有數(shù)據(jù)丟失,上位機(jī)軟件會打印IRQ_CRC_ERROR,這個信息好像是硬件中斷函數(shù)打印的,但是我沒找到中斷回調(diào)函數(shù)在哪
//設(shè)置發(fā)送參數(shù)
Radio.SetTxConfig(MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,//模式LoRa,發(fā)送功率14dbm,0 FSK模式下頻移參數(shù),信號帶寬124KHz
LORA_SPREADING_FACTOR, LORA_CODINGRATE, //數(shù)據(jù)傳輸速率1024bps,編碼率
LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON, //前導(dǎo)長度8、是否固定數(shù)據(jù)包長度(否)
true, 0, 0, LORA_IQ_INVERSION_ON, TX_TIMEOUT_VALUE);//是否CRC校驗(yàn)(是),是否頻率跳變,頻率跳變周期,IQ采樣反轉(zhuǎn)大多數(shù)情況為0,發(fā)送超時時間3秒
//設(shè)置接收參數(shù)
Radio.SetRxConfig(MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, //模式,信號帶寬,數(shù)據(jù)傳輸速率
LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH, //編碼率,0設(shè)置FSK的AFC自動頻率控制,前導(dǎo)長度
LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, //超時符號數(shù),是否固定數(shù)據(jù)包長度
0, true, 0, 0, LORA_IQ_INVERSION_ON, true); //0若為固定數(shù)據(jù)包則有這個參數(shù)設(shè)置長度,CRC校驗(yàn)true,是否頻率跳變0,頻率跳變周期0,IQ采樣反轉(zhuǎn)大多數(shù)情況為0,true
Radio.SetMaxPayloadLength(MODEM_LORA, MAX_APP_BUFFER_SIZE); //設(shè)置最大負(fù)載長度255
|
|