Add flow-control type to radio FW name #145
|
This is a nice-to-have feature. please feel free to do it after v4.0.0 release. I just want to document it before I forget. Currently, the name convention for Radio FW is <fw_type>, it would be great to have flow control type in the name. Especially, it is useful when we are developing a new board, and we want to try different configuration. Maybe something likes this will be helpful: <fw_type><flow_control_type><uart_driver_type>. Thanks for considering this. |
Replies: 3 comments
Implemented for v4.0.0 (this also closes the
|
| Firmware | lidl |
sengled-e39-g8c |
|---|---|---|
| NCP | ncp-uart-hw-7.5.1-115200-hw.gbl |
ncp-uart-hw-7.5.1-115200-sw-sengled-e39-g8c.gbl |
| RCP | rcp-uart-802154-460800-hw.gbl |
rcp-uart-802154-460800-none-sengled-e39-g8c.gbl |
| OT-RCP | ot-rcp-460800-hw-uartdrv.gbl |
ot-rcp-460800-sw-iostream-sengled-e39-g8c.gbl |
| Router | z3-router-7.5.1-115200-hw.gbl |
z3-router-7.5.1-115200-sw-sengled-e39-g8c.gbl |
Notes:
flash_efr32.shresolves the new names by anchoring<flow>/<driver>exactly from the board'sBOARD_UART_FLOW, so it stays a single deterministic match and a forced-driver build (UART_DRIVER=iostream ./build_ot_rcp.sh→ot-rcp-460800-hw-iostream.gbl) never shadows the defaultot-rcp-460800-hw-uartdrv.gbl.- The old bare
-iostreammarker is gone: the driver is always spelled out now, so a forced build differs by its driver field rather than by an add-on suffix. - Committed prebuilts were renamed (contents unchanged); the legacy no-baud artefacts (
ot-rcp.gbl, etc.) are left as-is.
Queued for v4.0.0, along with the rest of the batch waiting on the issue #99 soak.
|
@jnilo1 Thanks for implementing the consistency enhancement! That's great. I have a few questions:
Thanks |
1 — the driver choice does not exist for RCP; for OT-RCP the cost of iostream is CPU per byteWorth separating first, because it is the reason the driver field is only on OT-RCP: RCP has no such choice. The CPC secondary stack owns the UART itself, so there is no uartdrv-vs-iostream decision to make there (and none to encode in the filename). NCP and the Z3 router are always the iostream USART backend. OT-RCP is the one firmware where the backend is genuinely selectable: the OpenThread platform abstraction compiles So, for OT-RCP on the Lidl, what do you give up by taking iostream instead of uartdrv? uartdrv is DMA-first — the LDMA moves the bytes, the CPU sees a completion per buffer, so the per-byte cost is near zero. iostream takes an interrupt per byte. At 460800 that is on the order of 46 000 RX interrupts per second at full line rate, on a Cortex-M4 that is also running RAIL's timing-critical 802.15.4 work. That is the drawback on paper, and it is why uartdrv stays the default on a board that wires RTS/CTS: hardware flow control is strictly the better protection, and DMA is the cheaper way to get it. In practice we could not measure a penalty: an iostream OT-RCP at 460800 with hardware flow ran clean on our Lidl bench — 30 back-to-back spinel operations, network formed, state leader, no link errors, then left soaking. That is what made the backend swap trustworthy enough to ship for 2 — CPC is hardware-flow-or-nothing, by construction — enabling sw flow would be worse, not saferCPC is not independent of flow control, but it has no software mode, and that is structural rather than an omission. Look at the wire format: a CPC frame is a 7-byte header (flag Hence the EFR32 CPC UART driver offers RTS/CTS or nothing, and cpcd's only knob is So: enabling software flow control would not be safer, it is not available, and forcing the bridge into Please do try it at the 460800 default first. We genuinely do not know whether CPC holds at 460800 on a board with no flow control — nobody has ever run the RCP path on a G4, and you are the only person who can find out. The reasoning above says the FIFO will overrun under burst, but reasoning is not measurement: CPC retransmits, so the honest question is whether the retry rate is negligible or crippling, and that is an empirical question about your box. Either answer is worth having, and it goes straight into the docs. The instrument is the same one we used for OT-RCP: Whatever you find, post it here. Right now the G4 RCP path is built but never functionally validated by anyone, so your result — good or bad — is the first real data on it. (NCP remains the validated Zigbee path on your board in the meantime.) |
1 — the driver choice does not exist for RCP; for OT-RCP the cost of iostream is CPU per byte
Worth separating first, because it is the reason the driver field is only on OT-RCP: RCP has no such choice. The CPC secondary stack owns the UART itself, so there is no uartdrv-vs-iostream decision to make there (and none to encode in the filename). NCP and the Z3 router are always the iostream USART backend. OT-RCP is the one firmware where the backend is genuinely selectable: the OpenThread platform abstraction compiles
iostream_uart.coruartdrv_uart.cpurely from which USART instance the project declares — a project-level swap, zero firmware code.So, for OT-RCP on the Lidl, what do you give…