【Device】入网参数的保存

ST 适配的 LoRaWAN 协议栈 stm32-mw-lorawan 当前版本:2.6.2 由于是 ST 适配过,所以和 Semtech 开源的 LoRaMac-node 协议栈还是有差别的 一、OTAA 1. 参数 OTAA 主要参数如下: DevAddr AppSKey NwkSKey NetworkActivation 2. 入网保存参数的流程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 /* Mac/LoRaMac.c */ static void ProcessRadioRxDone( void ) { ... switch( macHdr.Bits.MType ) { case FRAME_TYPE_JOIN_ACCEPT: { ... SecureElementGetJoinEui( joinEui ); /* 解密 */ macCryptoStatus = LoRaMacCryptoHandleJoinAccept( JOIN_REQ, joinEui, &macMsgJoinAccept ); ... ... /** * 更新设备地址 DevAddr * 1. Nvm.MacGroup2.DevAddr * 2. Nvm.SecureElement.SeNvmDevJoinKey.DevAddrOTAA */ Nvm.MacGroup2.DevAddr = macMsgJoinAccept.DevAddr; SecureElementSetDevAddr( ACTIVATION_TYPE_OTAA, Nvm.MacGroup2.DevAddr ); ... /* 更新激活状态 NetworkActivation */ Nvm.MacGroup2.NetworkActivation = ACTIVATION_TYPE_OTAA; ... ... break; } ... } ... } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 /* Mac/LoRaMacCrypto.c */ LoRaMacCryptoStatus_t LoRaMacCryptoHandleJoinAccept( JoinReqIdentifier_t joinReqType, uint8_t* joinEUI, LoRaMacMessageJoinAccept_t* macMsg ) { ... { ... /** * 生成密钥 AppSKey * 1. Nvm.SecureElement.KeyList[], 对应的 key id 是 APP_S_KEY */ retval = DeriveSessionKey10x( APP_S_KEY, currentJoinNonce, netID, nonce ); ... #if (defined( LORAMAC_VERSION ) && ( LORAMAC_VERSION == 0x01010100 )) ... #else /** * 生成密钥 NwKSKey * 1. Nvm.SecureElement.KeyList[], 对应的 key id 是 NWK_S_KEY */ retval = DeriveSessionKey10x( NWK_S_KEY, currentJoinNonce, netID, nonce ); #endif ... } ... /** * FCnt 相关统计清零 * CryptoNvm 指向的是 Nvm.Crypto, 实际是 * 1. Nvm.Crypto.FCntList.FCntUp * 2. Nvm.Crypto.FCntList.FCntDown * 3. Nvm.Crypto.FCntList.NFCntDown * 4. Nvm.Crypto.FCntList.AFCntDown */ CryptoNvm->FCntList.FCntUp = 0; CryptoNvm->FCntList.FCntDown = FCNT_DOWN_INITIAL_VALUE; CryptoNvm->FCntList.NFCntDown = FCNT_DOWN_INITIAL_VALUE; CryptoNvm->FCntList.AFCntDown = FCNT_DOWN_INITIAL_VALUE; return LORAMAC_CRYPTO_SUCCESS; } 二、ABP 1. 参数 ABP 要预先配置的参数如下: ...

January 25, 2026 · 11 min · 2329 words

【Gateway】射频芯片通信

芯片:ESP32-S3(v0.2) IDF 版本:ESP-IDF-v5.5.0 一、SX125x SX125x 指的是 SX1255 和 SX1257。 1. SPI 通信格式 在硬件上,SX125x 的 SPI 引脚连接的是 SX1302 Radio A/B 的 SPI 接口,所以主控是通过 SX1302 来控制 SX125x 的。 对于 SX1302 未提供。 对于 SX125x 1 2 3 4 5 6 7 8 9 10 11 12 13 NSS -----+ +----- | | +-----------------------------------------------------+ SCK ... MOSI +-----+-----------+-----------------+-----------------+-----+ | W/R | Addr[6:0] | Data Write[7:0] | Data Write[7:0] | ... | -----+-----+-----------+-----------------+-----------------+-----+----- MISO +-----------------+-----------------+-----------------+-----+ | xxx | Data Read[7:0] | Data Read[7:0] | ... | -----+-----------------+-----------------+-----------------+-----+----- 寄存器地址范围在 0x00 - 0x13 2. SPI 通信函数 单字节的写操作 ...

December 16, 2025 · 4 min · 849 words

【Node】占空比机制

协议栈代码:LoRaMac-node v4.7.0 参考文档 《RP002-1.0.4 LoRaWAN® Regional Parameters》 《TS001-1.0.4 LoRaWAN® L2 1.0.4 Specification》 一、占空比 1. 区域和占空比 参考《RP002-1.0.4 LoRaWAN® Regional Parameters》1.3 Regional Parameters Summary Tables 有些 Region 是有占空比限制,有些 Region 是没有占空比限制的。 对于动态频点的 Region: 对于固定频点的 Region: 2. 占空比规则 参考《TS001-1.0.4 LoRaWAN® L2 1.0.4 Specification》7 Retransmissions Backoff 3. 占空比代码 占空比代码涉及到两个概念: 时间信用(Time Credit) 不同的时间段内,都有一个最大可花费的时间信用,每次发送数据都会消耗一笔时间信用,当时间信用不满足下一次发送的花费时,则不允许发送数据。 观察时间(Observation Time) 当出现当时间信用不满足下一次发送的花费这种情况时,则会计算到达下一个时间段的观察时间,在下一个时间段内所花费的时间信息会清零。 3.1. 占空比参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /* src/mac/region/RegionCommon.c */ /* Duty Cycle 1% */ #define BACKOFF_DC_1_HOUR 100 #define BACKOFF_DUTY_CYCLE_1_HOUR_IN_S 3600 #define BACKOFF_DUTY_CYCLE_10_HOURS_IN_S (BACKOFF_DUTY_CYCLE_1_HOUR_IN_S + (BACKOFF_DUTY_CYCLE_1_HOUR_IN_S * 10)) #define BACKOFF_DUTY_CYCLE_24_HOURS_IN_S (BACKOFF_DUTY_CYCLE_10_HOURS_IN_S + (BACKOFF_DUTY_CYCLE_1_HOUR_IN_S * 24)) #define BACKOFF_24_HOURS_IN_S (BACKOFF_DUTY_CYCLE_1_HOUR_IN_S * 24) #ifndef DUTY_CYCLE_TIME_PERIOD /* Default duty cycle observation time period is 1 hour (3600000 ms) according to ETSI. */ #define DUTY_CYCLE_TIME_PERIOD 3600000 #endif #ifndef DUTY_CYCLE_TIME_PERIOD_JOIN_BACKOFF_24H /* Time credits for the join backoff algorithm for the 24H period. */ #define DUTY_CYCLE_TIME_PERIOD_JOIN_BACKOFF_24H 870000 #endif 3.2. 更新占空比最大值 更新时间信用和观察时间: ...

November 11, 2025 · 8 min · 1492 words