查看SX126x的源代码
←
SX126x
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
== 各模式中断产生 == === set_rx(timeout)=== timeout 为 24bit (最长可设置时间 (2^24-1) * 15.625us = 262s),timeout = 0xFF FFFF 时,为持续接收模式 (Continous RX)。 '''timeout 时长不够,可能会读取同一个数据包好几次。。。''' * SF10 + CR4/6:数据位扩为 x1.5 (每 4bit 增加 2bit),10 个 4bit 组编码为 6 个 symbol * 42 Bytes , 1~3/4~7/8~11... 共 11 个 6 symbol,66 x 2.048ms = 135.168ms set_dio_irq_params() 只开启: <source lang=bash> SX126X_IRQ_RX_DONE | SX126X_IRQ_TIMEOUT | SX126X_IRQ_CRC_ERR </source> set_rx() 进入接收模式后,可能产生的中断: * 主要产生 RX_DONE * RX_DONE 和 CRC_ERR 会同时置位 * Continous RX 亦有可能产生 TIMEOUT 中断,即便所有 Timer 都没有设置 <source lang=bash> [ 7539.366831] sx126x spi1.0: irq state 0x42 # IRQ_CRC_ERR & IRQ_RX_DONE [ 7539.370941] sx126x sx126x0: crc err </source> <br> === RX Duty === /* * rxTime: 1ms * sleepTime: 200ms */ SetRxDutyCycle( rxTime, sleepTime ); 用于减少接收功耗。rxTime 和 sleepTime 都是 24bit,最长可设置时间 (2^24-1) * 15.625us = 262s Required to have a preamble emission time long enough to cover: sleepPeriod + preamble/header detection 即:sleepPeriod + 8 symbols(显头固定长度) 发射方的 preamble_len 需要足够长(最大 65535): * '''setup_v0()''' 模式下,单 symbol 约 2ms,前导 8+4.25 个 symbol,则前导码约 24.5ms,因此如测试 RX duty 模式宜 rx_win: 1ms,sleep_win: 8ms * 设置前导长 108 symbol,则 108+4.25,剔除显头固定的 8 symbol,sleepPeriod 可设为 200ms,48Bytes 的包,总发射时为 406ms StopTimerOnPreamble() 用于规范接收到 false header 后行为: * StopTimerOnPreamble(true),则检测到 false header 后,继续在 rx 模式(5mA 左右),直到收到下一个 true header * StopTimerOnPreamble(false),则检测到 false header 后,Timer 活着,一个时间窗口后,即产生 rxTimeout irq,并退回 sleep 模式 参考:AN1200.36_SX1261-2_RxDutyCycle_V1.0.pdf <br> === Continous RX === 该模式下,仍然产生各种中断: * IRQ_PREAMBLE_DETECTED * IRQ_HEADER_VALID (+30ms) * IRQ_TIMEOUT & IRQ_CAD_DETECTED * IRQ_HEADER_ERR * IRQ_RX_DONE (+100ms) & IRQ_CRC_ERR 建议用 set_dio_irq_params() 开启所有 IRQ (只开启 RX_DONE | CRC_ERR | TIMEOUT 会造成读取错误数据包): <source lang=cpp> sx126x_set_dio_irq_params(dev, SX126X_IRQ_ALL, SX126X_IRQ_ALL, SX126X_IRQ_NONE, SX126X_IRQ_NONE); </source> 10:30 - 15:00 接收数据,SPI 16M: <source lang=cpp> 1000s: * cnt_crc_err: 68 * cnt_rx: 346 * cnt_rx255: 406 4000s: * cnt_crc_err: 255 * cnt_rx: 1460 * cnt_rx255: 1717 enable tx_boost, 8000s: * cnt_crc_err: 360 * cnt_rx: 2627 * cnt_rx255: 3235 </source> cnt_rx / cnt_rx255 始终 0.85 左右 11/20 9:40 开始,SPI 16M <source lang=bash> 3000s: * cnt_crc_err: 202 * cnt_rx: 988 * cnt_rx255: 1257 4000s: * cnt_crc_err: 260 * cnt_rx: 1323 * cnt_rx255: 1725 enable tx_boost, 8000s: * cnt_crc_err: 360 * cnt_rx: 2627 * cnt_rx255: 3235 enable tx_boost, 15200s: * cnt_crc_err: 777 * cnt_rx: 5208 * cnt_rx255: 6236 </source> 11/27 16:30 左右 SPI 8M <source lang=bash> cch 2000S: * cnt_crc_err: 266 * cnt_rx: 2984 * cnt_rx255: 0 dch 300s: * cnt_crc_err:22 * cnt_rx: 396 * cnt_rx255: 0 radio0 (SPI 4M) & radio1 (SPI 8M) 同时,1500s: * cnt_crc_err: 212 * cnt_rx: 2282 * cnt_rx255: 0 * cnt_crc_err: 137 * cnt_rx: 2017 * cnt_rx255: 0 </source> 11/28 11:20 开始: <source lang=cpp> SPI0 2M + SPI1 8M 1400s * cnt_crc_err: 148 * cnt_rx: 1332 * cnt_rx255: 0 * cnt_crc_err: 180 * cnt_rx: 2383 * cnt_rx255: 0 SPI0 12M + SPI1 8M 3300s * cnt_crc_err: 457 * cnt_rx: 4836 * cnt_rx255: 388 * cnt_crc_err: 82 * cnt_rx: 1247 * cnt_rx255: 0 </source> cch (radio0) 需要: echo 8 >/sys/class/sx126x/radio0/pre_len && echo 472500000 >/sys/class/sx126x/radio0/freq echo RX_CON >/sys/class/sx126x/radio0/rx_mode && echo RX_CON >/sys/class/sx126x/radio1/rx_mode 才能正常接收 一个有效接收可能产生的中断: <source lang=bash> [ 111.479486] sx126x spi1.0: irq state 0x04 # IRQ_PREAMBLE_DETECTED [ 112.446459] sx126x spi1.0: irq state 0x04 # IRQ_PREAMBLE_DETECTED [ 112.483135] sx126x spi1.0: irq state 0x10 # IRQ_HEADER_VALID [ 112.487350] sx126x sx126x0: Header Valid for received payload [ 112.606014] sx126x spi1.0: irq state 0x02 # IRQ_RX_DONE [ 112.610270] sx126x spi1.0: FIFO read: 36 from 0xe4 [ 112.616506] rx: 47 4f 34 00 00 00 02 e3 9a 12 e2 01 4a 0e 56 02 GO4.........J.V. [ 112.624091] rx: 08 00 04 0b 16 04 0b 18 00 00 00 04 00 02 04 48 ...............H [ 112.631754] rx: 9a 6c 8f 22 [ 112.913692] sx126x spi1.0: irq state 0x300 # IRQ_TIMEOUT & IRQ_CAD_DETECTED [ 112.917988] sx126x sx126x0: Tx or Rx timeout [ 116.042765] sx126x spi1.0: irq state 0x04 # IRQ_PREAMBLE_DETECTED [ 116.078858] sx126x spi1.0: irq state 0x300 # IRQ_TIMEOUT & IRQ_CAD_DETECTED [ 116.083053] sx126x sx126x0: Tx or Rx timeout [ 116.201725] sx126x spi1.0: irq state 0x02 # IRQ_RX_DONE [ 116.206084] sx126x spi1.0: FIFO read: 36 from 0x08 [ 116.211163] rx: 47 4f 33 00 00 00 02 e4 d8 3c 93 0b b8 0e 07 02 GO3......<...... [ 116.218796] rx: 00 00 00 00 fe 16 02 58 00 00 00 04 00 00 05 a2 .......X........ [ 116.226382] rx: 4e 33 5e 0f </source> Continous RX 模式下,Enable IRQ_ALL,对类似 IRQ_HEADER_VALID、IRQ_PREAMBLE_DETECTED、 IRQ_TIMEOUT、IRQ_CAD_DETECTED 中断进行 clear_irq() 可以提高从 buffer 解包数据的正确性: <source lang=bash> [ 9951.480925] sx126x spi1.0: irq state 0x02 [ 9951.485287] sx126x spi1.0: Rx FIFO: 36 Bytes @ 0xea [ 9951.490470] rx: 47 4f 33 00 00 00 02 cc 0b 57 b2 ff ec 0e 17 02 GO3......W...... [ 9951.498110] rx: 00 00 00 00 fe 12 fe fe 00 00 00 00 32 fc 08 f7 ............2... [ 9951.505700] rx: fc 4e 62 b7 .Nb. [ 9951.796843] sx126x spi1.0: irq state 0x04 [ 9951.831965] sx126x spi1.0: irq state 0x10 [ 9951.954882] sx126x spi1.0: irq state 0x300 [ 9952.303437] sx126x spi1.0: irq state 0x04 [ 9952.339928] sx126x spi1.0: irq state 0x300 [ 9952.462799] sx126x spi1.0: irq state 0x300 [ 9953.438117] sx126x spi1.0: irq state 0x300 [ 9953.473598] sx126x spi1.0: irq state 0x10 [ 9953.596473] sx126x spi1.0: irq state 0x300 [ 9954.575904] sx126x spi1.0: irq state 0x300 [ 9954.611397] sx126x spi1.0: irq state 0x300 [ 9954.734278] sx126x spi1.0: irq state 0x300 [ 9955.044056] sx126x spi1.0: irq state 0x04 [ 9955.078832] sx126x spi1.0: irq state 0x10 [ 9955.201722] sx126x spi1.0: irq state 0x02 [ 9955.206095] sx126x spi1.0: Rx FIFO: 36 Bytes @ 0x9e [ 9955.211273] rx: 47 4f 33 00 00 00 02 ea ce 42 54 0b b8 0e 53 02 GO3......BT...S. [ 9955.218914] rx: 00 01 0a 16 fe 14 01 2a b7 b2 00 14 00 09 07 23 .......*.......# [ 9955.226504] rx: a8 87 98 d0 .... [ 9955.347561] sx126x spi1.0: irq state 0x300 [ 9955.512402] sx126x spi1.0: irq state 0x300 [ 9955.549066] sx126x spi1.0: irq state 0x300 [ 9955.671928] sx126x spi1.0: irq state 0x300 [ 9955.973515] sx126x spi1.0: irq state 0x04 [ 9956.008291] sx126x spi1.0: irq state 0x10 [ 9956.131136] sx126x spi1.0: irq state 0x300 [ 9956.676438] sx126x spi1.0: irq state 0x300 [ 9956.711175] sx126x spi1.0: irq state 0x10 [ 9956.834011] sx126x spi1.0: irq state 0x300 [ 9957.164285] sx126x spi1.0: irq state 0x300 [ 9957.200151] sx126x spi1.0: irq state 0x300 [ 9957.322975] sx126x spi1.0: irq state 0x300 [ 9957.483283] sx126x spi1.0: irq state 0x300 [ 9957.520345] sx126x spi1.0: irq state 0x300 [ 9957.643218] sx126x spi1.0: irq state 0x02 [ 9957.647595] sx126x spi1.0: Rx FIFO: 255 Bytes @ 0x24 [ 9957.652626] sx126x sx126x0: payload len is 0 [ 9957.700262] sx126x spi1.0: irq state 0x300 [ 9958.350278] sx126x spi1.0: irq state 0x300 [ 9959.484997] sx126x spi1.0: irq state 0x300 [ 9959.521237] sx126x spi1.0: irq state 0x300 [ 9959.644097] sx126x spi1.0: irq state 0x02 [ 9959.648453] sx126x spi1.0: Rx FIFO: 36 Bytes @ 0x76 [ 9959.653635] rx: 47 4f 33 00 00 00 02 ea ce 40 ec 0b b8 0e 3f 02 GO3......@....?. [ 9959.661275] rx: 00 01 0a 25 fe 16 01 2a 2b 4e 00 14 00 1c 06 d9 ...%...*+N...... [ 9959.668867] rx: a9 37 12 8d </source> <br>
返回到
SX126x
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面