NetHubQuickBringup:修订间差异

来自Bouffalo Lab Docs
跳转到导航 跳转到搜索
张良留言 | 贡献
Sync NetHub docs from local MediaWiki export
标签手工回退
张良留言 | 贡献
Add more NetHubQuickBringup FAQs (2026-04-24)
 
(未显示同一用户的8个中间版本)
第1行: 第1行:
= NetHub 快速上手 =
= NetHub Quick Start =


本文档面向首次接触 NetHub 的客户,目标是尽快完成 device 和 host 的 bringup。
This document is for customers using NetHub for the first time. The goal is to get you to the current default interface as quickly as possible.


== 1. 方案概览 ==
[[文件:Nethub_sdio_quickstart_demo.gif | NetHub SDIO Quick Start Demo]]


* 当前主路径是 '''SDIO'''
== 1. Current Support Matrix ==
* device 侧运行 <code>Wi-Fi backend(fhost / wl80211)+ lwIP</code>
* <code>nethub</code> 负责把 device 侧 Wi-Fi 能力桥接到 host
* 控制通道和 <code>USER virtual channel</code> 都承载在同一条 host link 上


当前生效目录:
{| class="wikitable"
|-
! Item !! Current status
|-
| Default interface || <code>SDIO</code>
|-
| USB interface || device-side backend implemented with <code>USB ECM + USB ACM</code>
|-
| SPI interface || not implemented
|-
| USER virtual channel || default interface is <code>SDIO</code>
|-
| Optional AT control solution || available, but not mandatory
|-
| Low power || currently <code>BL618DG</code> only
|}


* device 侧
Read this table literally:
** <code>components/net/nethub</code>
** <code>examples/wifi/nethub</code>
* host 侧
** <code>bsp/common/msg_router/linux_host/kernel</code>
** <code>bsp/common/msg_router/linux_host/userspace/nethub</code>


== 2. Bringup 前先确认两项选择 ==
* if you want the shortest successful path today, choose <code>SDIO</code>
* if you are evaluating the USB interface, focus on the device-side backend and USB descriptors first
* do not plan on <code>SPI</code> bring-up yet


=== 2.1 选择 Wi-Fi backend ===
== 2. Main Configuration Switches ==


默认配置:
For most users, the main configuration changes are these:


* 不打开 <code>CONFIG_WL80211</code>
<syntaxhighlight lang="makefile">
* 使用 <code>fhost</code>
CONFIG_NETHUB_CTRLCHANNEL_USE_ATMODULE =y
CONFIG_NETHUB_LOWPOWER_ENABLE          =y
CONFIG_NETHUB_PROFILE_USB              =n
CONFIG_NETHUB_PROFILE_SDIO            =y
</syntaxhighlight>


如果要切到 <code>wl80211</code>,在 <code>examples/wifi/nethub/defconfig</code> 中打开:
Notes:


<syntaxhighlight lang="make">
* the config symbol names still use <code>PROFILE</code>, but they select the active host interface
CONFIG_WL80211=y
* set <code>CONFIG_NETHUB_PROFILE_SDIO=y</code> for the current default interface
</syntaxhighlight>
* set <code>CONFIG_NETHUB_PROFILE_USB=y</code> only when you want to evaluate the USB interface
* <code>CONFIG_NETHUB_CTRLCHANNEL_USE_ATMODULE=n</code> means <code>ATModule</code> will not participate in the build
* <code>CONFIG_NETHUB_LOWPOWER_ENABLE=y</code> is currently meaningful only on <code>BL618DG</code>


说明:
Additional current default facts in <code>examples/wifi/nethub/defconfig</code>:


* <code>fhost</code> <code>wl80211</code> 是二选一关系
* <code>CONFIG_MR_VIRTUALCHAN=y</code>
* 当前 <code>nethub</code> 同时支持这两种 device Wi-Fi backend
* <code>CONFIG_NETHUB_AT_USE_VCHAN=n</code>
* <code>CONFIG_MR_TTY=n</code>


=== 2.2 选择控制通道 ===
== 3. Wi-Fi Backend Selection ==


device 与 host 需要匹配:
Default configuration:


{| class="wikitable"
* <code>CONFIG_WL80211</code> disabled
! device 配置
* <code>fhost</code> selected
! host 启动方式
|-
| <code>CONFIG_NETHUB_AT_USE_VCHAN=n</code>
| <code>./output/bflbwifid</code> 或 <code>./output/bflbwifid -c tty -p /dev/ttyAT0</code>
|-
| <code>CONFIG_NETHUB_AT_USE_VCHAN=y</code>
| <code>./output/bflbwifid -c vchan</code>
|}


默认配置是:
If you want <code>wl80211</code>, enable this in <code>examples/wifi/nethub/defconfig</code>:


<syntaxhighlight lang="make">
<syntaxhighlight lang="makefile">
CONFIG_NETHUB_AT_USE_VCHAN=n
CONFIG_WL80211=y
</syntaxhighlight>
</syntaxhighlight>


即控制通道默认走 <code>TTY</code>。
Notes:


补充说明:
* <code>fhost</code> and <code>wl80211</code> are mutually exclusive
* current NetHub supports both device-side Wi-Fi backends


* host 侧会同时编入 <code>tty + vchan</code>
== 4. Device Build and Flash ==
* 实际选择发生在 <code>bflbwifid</code> 运行时


== 3. 编译并烧录 device 固件 ==
Build:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
第82行: 第90行:
</syntaxhighlight>
</syntaxhighlight>


烧录示例:
Flash example:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
第89行: 第97行:
</syntaxhighlight>
</syntaxhighlight>


常见关键配置:
== 5. Hardware Interface Pins ==


* <code>CONFIG_NETHUB=y</code>
The pin tables below are the current default mappings used by the in-tree BSP board helpers.
* <code>CONFIG_MR_NETDEV=y</code>
 
* <code>CONFIG_MR_TTY=y</code>
Reference sources in the repository:
* <code>CONFIG_MR_VIRTUALCHAN=y</code>
 
* <code>CONFIG_NETHUB_AT_USE_VCHAN=n</code>
* <code>bsp/board/bl616dk/board_gpio.c</code>
* <code>bsp/board/bl616cldk/board_gpio.c</code>
* <code>bsp/board/bl618dgdk/board_gpio.c</code>
 
=== 5.1 Default SDIO Pins ===
 
These are the current <code>board_sdh_gpio_init()</code> mappings used by the BSP.
 
{| class="wikitable"
|-
! Pin Function !! BL616 / BL618 (<code>bl616dk</code>) !! BL618DG (<code>bl618dgdk</code>) !! BL616CL (<code>bl616cldk</code>)
|-
| <code>SDIO_DAT2</code> || <code>GPIO10</code> || <code>GPIO43</code> || <code>GPIO6</code>
|-
| <code>SDIO_DAT3</code> || <code>GPIO11</code> || <code>GPIO44</code> || <code>GPIO7</code>
|-
| <code>SDIO_CMD</code> || <code>GPIO12</code> || <code>GPIO45</code> || <code>GPIO8</code>
|-
| <code>SDIO_CLK</code> || <code>GPIO13</code> || <code>GPIO46</code> || <code>GPIO9</code>
|-
| <code>SDIO_DAT0</code> || <code>GPIO14</code> || <code>GPIO47</code> || <code>GPIO10</code>
|-
| <code>SDIO_DAT1</code> || <code>GPIO15</code> || <code>GPIO48</code> || <code>GPIO11</code>
|}
 
Notes:
 
* this table shows the current default 4-bit SDIO wiring used by the NetHub SDIO data-path
* 1-line mode is also supported; if you use 1-line mode, keep <code>CMD</code>, <code>CLK</code>, and <code>DAT0</code> first
* the BSP configures these pins with <code>GPIO_FUNC_SDH | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1</code>
 
=== 5.2 Default USB Pins ===
 
The current USB interface uses the board's default USB differential pair.
 
{| class="wikitable"
|-
! Chip / Board family !! Default USB pins in current BSP !! Current BSP behavior !! Notes
|-
| BL616 / BL618 (<code>bl616dk</code>) || board default USB port path || current BSP enables USB clock in <code>board.c</code>, but does not expose a dedicated <code>board_usb_gpio_init()</code> helper || treat this as the board's fixed default USB routing in the current example
|-
| BL616CL (<code>bl616cldk</code>) || <code>GPIO32</code>, <code>GPIO33</code> || <code>board_usb_gpio_init()</code> configures the pair as analog pins || current BSP documents the pair, not separate <code>DP</code> / <code>DM</code> labels
|-
| BL618DG (<code>bl618dgdk</code>) || <code>GPIO40</code>, <code>GPIO41</code> || <code>board_usb_gpio_init()</code> configures the pair as analog pins || current BSP documents the pair, not separate <code>DP</code> / <code>DM</code> labels
|}
 
Notes:
 
* for <code>BL616CL</code> and <code>BL618DG</code>, the BSP helper only tells us the USB pair used by the board, not which pin is <code>D+</code> and which pin is <code>D-</code>
* if you are wiring a custom board and need explicit <code>DP</code> / <code>DM</code> polarity, confirm it from the board schematic or chip or package documentation
 
== 6. Host Bring-Up Guidance ==
 
For the current in-tree host Linux stack, use:


== 4. 编译并启动 host 软件 ==
* <code>bsp/common/msg_router/linux_host/userspace/nethub/README.md</code>


=== 4.1 编译 ===
Today that host stack follows the default <code>SDIO</code> interface.


<syntaxhighlight lang="bash">
For USB projects, keep expectations aligned with current code status:
cd bsp/common/msg_router/linux_host/userspace/nethub
./build.sh build
</syntaxhighlight>


产物:
* device-side <code>ECM + ACM</code> backend exists
* host-side transport flattening into the same <code>nethub_vchan</code> behavior as SDIO is not fully documented or aligned in-tree yet


* <code>output/mr_sdio.ko</code>
== 7. USER Virtual Channel ==
* <code>output/bflbwifid</code>
* <code>output/bflbwifictrl</code>
* <code>output/libnethub_vchan.a</code>
* <code>output/nethub_vchan_app</code>


=== 4.2 加载内核模块 ===
If you need private application messages between host and device, read:


<syntaxhighlight lang="bash">
* [[NetHubVirtualChannel|NetHubVirtualChannel.md]]
cd bsp/common/msg_router/linux_host/userspace/nethub
sudo ./build.sh load
</syntaxhighlight>


如需卸载:
Current implementation:


<syntaxhighlight lang="bash">
* the current in-tree end-to-end USER virtual channel follows the default <code>SDIO</code> interface
sudo ./build.sh unload
* the public device API is transport-neutral by design
</syntaxhighlight>
* the in-tree implementation behind it is still SDIO-backed today


=== 4.3 启动 host daemon ===
== 8. Low-Power Note ==


默认 TTY 模式:
Low power is currently supported only on <code>BL618DG</code>.


<syntaxhighlight lang="bash">
For other chips, <code>examples/wifi/nethub/defconfig</code> automatically turns <code>CONFIG_NETHUB_LOWPOWER_ENABLE</code> off. In practice, you normally keep this option enabled only for <code>BL618DG</code> builds.
sudo ./output/bflbwifid
</syntaxhighlight>


显式指定 TTY:
== 9. Common Questions ==


<syntaxhighlight lang="bash">
=== 9.1 <code>bflbwifid</code> Fails to Start ===
sudo ./output/bflbwifid -c tty -p /dev/ttyAT0
</syntaxhighlight>


VCHAN 模式:
This question is relevant only when you use the optional host control stack.


<syntaxhighlight lang="bash">
Check first:
sudo ./output/bflbwifid -c vchan
</syntaxhighlight>


== 5. 基础验证流程 ==
* whether the device and host control backends match
* whether <code>/dev/ttyAT0</code> exists
* whether <code>mr_sdio.ko</code> has been loaded successfully
* whether the SDIO hardware link is working properly


建议按下面顺序验证:
=== 9.2 <code>connect_ap</code> Succeeds but the Host Has No Network Access ===


=== 5.1 查看状态 ===
Check first:


<syntaxhighlight lang="bash">
* whether <code>status</code> has reached <code>GOTIP</code>
sudo ./output/bflbwifictrl status
* whether <code>mr_eth0</code> has an address
</syntaxhighlight>
* whether services such as <code>NetworkManager</code> or <code>dhcpcd</code> override the NetHub configuration


=== 5.2 扫描 AP ===
Notes:


<syntaxhighlight lang="bash">
* <code>build.sh</code> builds userspace with <code>ENABLE_NETIF_AUTO_CONFIG=1</code> by default
sudo ./output/bflbwifictrl scan
* after the device reports <code>GOTIP</code>, the host automatically configures the IP, gateway, and DNS of <code>mr_eth0</code>
</syntaxhighlight>


=== 5.3 连接 AP ===
=== 9.3 <code>build.sh unload</code> Reports That the Module Is Busy ===


<syntaxhighlight lang="bash">
Check first:
sudo ./output/bflbwifictrl connect_ap "<ssid>" "<password>"
</syntaxhighlight>


=== 5.4 再次查看状态 ===
* whether <code>bflbwifid</code> is still running
* whether <code>nethub_vchan_app</code> is still running


<syntaxhighlight lang="bash">
=== 9.4 How Do I Change the Host-Side Virtual Interface Name <code>mr_eth0</code>? ===
sudo ./output/bflbwifictrl status
</syntaxhighlight>


如果连接成功,通常可以看到:
The default host-side virtual network interface name comes from:


* backend 已连接
* <code>bsp/common/msg_router/linux_host/kernel/netdev/mr_netdev.c</code>
* Wi-Fi 状态为 <code>CONNECTED</code> 或 <code>GOTIP</code>
* 获取到地址后显示 <code>IP / Gateway / Netmask / DNS</code>


=== 5.5 断开连接 ===
The macro is:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="c">
sudo ./output/bflbwifictrl disconnect
#define ETH_DRV_NAME "mr_eth%d"
</syntaxhighlight>
</syntaxhighlight>


== 6. 常用命令 ==
The first created interface therefore appears as <code>mr_eth0</code>.


当前公共命令固定为 9 条:
To change the interface name, update <code>ETH_DRV_NAME</code> to the pattern you want. For example:


* <code>connect_ap</code>
<syntaxhighlight lang="c">
* <code>disconnect</code>
#define ETH_DRV_NAME "nethub%d"
* <code>scan</code>
</syntaxhighlight>
* <code>status</code>
* <code>version</code>
* <code>reboot</code>
* <code>ota</code>
* <code>start_ap</code>
* <code>stop_ap</code>


== 7. SDIO 硬件信息 ==
Notes:


当前客户 bringup 路径建议直接按 <code>SDIO</code> 使用。
* keep <code>%d</code> if you want Linux to allocate names such as <code>nethub0</code>, <code>nethub1</code>, and so on
<code>USB / SPI</code> 目前仍保留架构骨架,不作为当前推荐 bringup 路径。
* rebuild the host software after the change and reload the host-side kernel module
* if any local scripts or service configuration still refer to <code>mr_eth0</code>, update them accordingly


=== 7.1 芯片支持情况 ===
=== 9.5 Can the Host Expose <code>AP</code> and <code>STA</code> at the Same Time? ===


{| class="wikitable"
No. Due to the current software implementation, this is not supported yet.
! 接口类型
 
! BL616 / BL618
Current behavior:
! BL618DG
 
! BL616CL
* the host side exposes only one virtual interface at a time
|-
* the default active Wi-Fi channel is <code>STA</code>
| SDIO
| 支持
| 支持
| 支持
|-
| USB
| 规划中
| 规划中
| 规划中
|-
| SPI
| 规划中
| 规划中
| 规划中
|}


=== 7.2 SDIO 引脚 ===
If you need to switch between <code>AP</code> and <code>STA</code>, call <code>nethub_set_active_wifi_channel()</code> directly:


{| class="wikitable"
* use <code>NETHUB_CHANNEL_WIFI_AP</code> to switch to <code>AP</code>
! 功能引脚
* use <code>NETHUB_CHANNEL_WIFI_STA</code> to switch to <code>STA</code>
! BL616 / BL618
* the default value is <code>NETHUB_CHANNEL_WIFI_STA</code>
! BL618DG
! BL616CL
|-
| SDIO_DAT2
| GPIO10
| GPIO43
| GPIO6
|-
| SDIO_DAT3
| GPIO11
| GPIO44
| GPIO7
|-
| SDIO_CMD
| GPIO12
| GPIO45
| GPIO8
|-
| SDIO_CLK
| GPIO13
| GPIO46
| GPIO9
|-
| SDIO_DATA0
| GPIO14
| GPIO47
| GPIO10
|-
| SDIO_DATA1
| GPIO15
| GPIO48
| GPIO11
|}


== 8. USER Virtual Channel ==
=== 9.6 What Should the Host Side Handle When <code>CONFIG_NETHUB_CTRLCHANNEL_USE_ATMODULE=n</code>? ===


如果客户需要在 host 与 device 之间传输私有消息,可使用 <code>USER virtual channel</code>
When <code>CONFIG_NETHUB_CTRLCHANNEL_USE_ATMODULE=n</code>, the optional AT-based host control solution is not part of the build.


说明:
What you need to handle yourself:


* <code>USER</code> 通道和控制通道是并列关系
* you need your own private control path to carry required messages between host and device
* 它不是独立物理接口,而是承载在当前 host link 上的逻辑通道
* this includes, but is not limited to, host netdev link-up handling
* this also includes host-side IP address and netmask configuration


device 侧头文件:
In short, NetHub still provides the data-path, but the host-side control workflow becomes your own responsibility.


* <code>components/net/nethub/include/nethub_vchan.h</code>
=== 9.7 Why Does <code>ifconfig</code> Not Show the Virtual Interface? ===


host 侧头文件:
Check first:


* <code>bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan.h</code>
* use a command such as <code>ifconfig -a</code> to list interfaces that are currently down
* find the virtual interface and bring it up manually, for example: <code>sudo ifconfig mr_eth0 up</code>


更多说明见 [[NetHubVirtualChannel|NetHub USER Virtual Channel]]。
Notes:


== 9. 常见问题 ==
* some Linux systems, including newer Raspberry Pi OS releases, run <code>NetworkManager</code> by default
* because of that, the exact behavior depends on your host environment and may need host-specific analysis


=== 9.1 <code>bflbwifid</code> 启动失败 ===
=== 9.8 For Dual-Stack Traffic, Can Users Customize the Filter? Is There Any Difference Between USB and SDIO? ===


优先检查:
Yes. The default configuration already covers most scenarios, but users can still customize the Wi-Fi RX filter if needed.


* device 和 host 的控制 backend 是否匹配
Important points:
* <code>/dev/ttyAT0</code> 是否存在
* <code>mr_sdio.ko</code> 是否已经成功加载
* SDIO 硬件链路是否正常


=== 9.2 <code>connect_ap</code> 成功但 host 没有网络 ===
* the filter is not bound to one interface type; there is no special filter split between <code>USB</code> and <code>SDIO</code>
* the current built-in policy is shared by both <code>SDIO</code> and <code>USB</code>
* you can refer to <code>components/net/nethub/profile/nh_profile_sdio.c</code> and <code>components/net/nethub/profile/nh_profile_usb.c</code>; both use the same built-in Wi-Fi RX policy


优先检查:
Default built-in policy reference:


* <code>status</code> 是否已经进入 <code>GOTIP</code>
* <code>components/net/nethub/profile/nh_profile_builtin.c</code>
* <code>mr_eth0</code> 是否已经获取地址
* <code>NH_FILTER_MATCH_8021X</code>: handled locally and not delivered to the host
* 系统里的 <code>NetworkManager</code><code>dhcpcd</code> 等服务是否覆盖了 NetHub 配置
* <code>NH_FILTER_MATCH_ARP</code>: handled locally and also delivered to the host
* <code>NH_FILTER_MATCH_DHCP4</code>: handled locally
* <code>NH_FILTER_MATCH_ICMP4</code>: handled locally
* other packets: delivered to the host by default


说明:
If the default policy does not match your requirement:


* <code>build.sh</code> 默认以 <code>ENABLE_NETIF_AUTO_CONFIG=1</code> 编译 userspace
* you can call <code>nethub_set_wifi_rx_filter(nethub_wifi_rx_filter_cb_t filter_cb, void *user_ctx)</code> from <code>components/net/nethub/include/nethub_filter.h</code>
* device 上报 <code>GOTIP</code> 后,host 会自动配置 <code>mr_eth0</code> 的 IP、网关和 DNS
* for the callback behavior, refer to <code>nh_filter_apply_policy()</code> in <code>components/net/nethub/core/nh_filter.c</code>
* if you need a more complex policy, it is also fine to contact us directly


=== 9.3 <code>build.sh unload</code> 提示模块被占用 ===
=== 9.9 Why Can the Host Not Ping Other Devices on the Same LAN? ===


优先确认:
This is expected with the current default policy.


* 是否还有 <code>bflbwifid</code> 正在运行
Reason:
* 是否还有 <code>nethub_vchan_app</code> 正在运行


通常直接执行:
* <code>ICMP</code> packets are handled locally on the device side by default
* they are not delivered to the host by default


<syntaxhighlight lang="bash">
So, by default:
sudo ./build.sh unload
</syntaxhighlight>


脚本会先尝试停止已知持有者,再执行卸载。
* other LAN devices pinging the device can work
* host-side ping visibility to other LAN devices is not part of the default behavior


== 10. 延伸阅读 ==
== 10. Where to Go Next ==


* [[NetHubArchitecture|NetHub 架构说明]]
* overall entry: [[NetHub|NetHub.md]]
* [[NetHubVirtualChannel|NetHub USER Virtual Channel]]
* architecture: [[NetHubArchitecture|NetHubArchitecture.md]]
* USER virtual channel: [[NetHubVirtualChannel|NetHubVirtualChannel.md]]

2026年4月24日 (五) 15:11的最新版本

NetHub Quick Start

This document is for customers using NetHub for the first time. The goal is to get you to the current default interface as quickly as possible.

NetHub SDIO Quick Start Demo

1. Current Support Matrix

Item Current status
Default interface SDIO
USB interface device-side backend implemented with USB ECM + USB ACM
SPI interface not implemented
USER virtual channel default interface is SDIO
Optional AT control solution available, but not mandatory
Low power currently BL618DG only

Read this table literally:

  • if you want the shortest successful path today, choose SDIO
  • if you are evaluating the USB interface, focus on the device-side backend and USB descriptors first
  • do not plan on SPI bring-up yet

2. Main Configuration Switches

For most users, the main configuration changes are these:

CONFIG_NETHUB_CTRLCHANNEL_USE_ATMODULE =y
CONFIG_NETHUB_LOWPOWER_ENABLE          =y
CONFIG_NETHUB_PROFILE_USB              =n
CONFIG_NETHUB_PROFILE_SDIO             =y

Notes:

  • the config symbol names still use PROFILE, but they select the active host interface
  • set CONFIG_NETHUB_PROFILE_SDIO=y for the current default interface
  • set CONFIG_NETHUB_PROFILE_USB=y only when you want to evaluate the USB interface
  • CONFIG_NETHUB_CTRLCHANNEL_USE_ATMODULE=n means ATModule will not participate in the build
  • CONFIG_NETHUB_LOWPOWER_ENABLE=y is currently meaningful only on BL618DG

Additional current default facts in examples/wifi/nethub/defconfig:

  • CONFIG_MR_VIRTUALCHAN=y
  • CONFIG_NETHUB_AT_USE_VCHAN=n
  • CONFIG_MR_TTY=n

3. Wi-Fi Backend Selection

Default configuration:

  • CONFIG_WL80211 disabled
  • fhost selected

If you want wl80211, enable this in examples/wifi/nethub/defconfig:

CONFIG_WL80211=y

Notes:

  • fhost and wl80211 are mutually exclusive
  • current NetHub supports both device-side Wi-Fi backends

4. Device Build and Flash

Build:

cd examples/wifi/nethub

# BL616
make CHIP=bl616 BOARD=bl616dk

# BL616CL
make CHIP=bl616cl BOARD=bl616cldk

# BL618DG
make CHIP=bl618dg BOARD=bl618dgdk CPU_ID=ap

Flash example:

cd examples/wifi/nethub
make flash CHIP=bl618dg COMX=/dev/ttyUSB0

5. Hardware Interface Pins

The pin tables below are the current default mappings used by the in-tree BSP board helpers.

Reference sources in the repository:

  • bsp/board/bl616dk/board_gpio.c
  • bsp/board/bl616cldk/board_gpio.c
  • bsp/board/bl618dgdk/board_gpio.c

5.1 Default SDIO Pins

These are the current board_sdh_gpio_init() mappings used by the BSP.

Pin Function BL616 / BL618 (bl616dk) BL618DG (bl618dgdk) BL616CL (bl616cldk)
SDIO_DAT2 GPIO10 GPIO43 GPIO6
SDIO_DAT3 GPIO11 GPIO44 GPIO7
SDIO_CMD GPIO12 GPIO45 GPIO8
SDIO_CLK GPIO13 GPIO46 GPIO9
SDIO_DAT0 GPIO14 GPIO47 GPIO10
SDIO_DAT1 GPIO15 GPIO48 GPIO11

Notes:

  • this table shows the current default 4-bit SDIO wiring used by the NetHub SDIO data-path
  • 1-line mode is also supported; if you use 1-line mode, keep CMD, CLK, and DAT0 first
  • the BSP configures these pins with GPIO_FUNC_SDH | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1

5.2 Default USB Pins

The current USB interface uses the board's default USB differential pair.

Chip / Board family Default USB pins in current BSP Current BSP behavior Notes
BL616 / BL618 (bl616dk) board default USB port path current BSP enables USB clock in board.c, but does not expose a dedicated board_usb_gpio_init() helper treat this as the board's fixed default USB routing in the current example
BL616CL (bl616cldk) GPIO32, GPIO33 board_usb_gpio_init() configures the pair as analog pins current BSP documents the pair, not separate DP / DM labels
BL618DG (bl618dgdk) GPIO40, GPIO41 board_usb_gpio_init() configures the pair as analog pins current BSP documents the pair, not separate DP / DM labels

Notes:

  • for BL616CL and BL618DG, the BSP helper only tells us the USB pair used by the board, not which pin is D+ and which pin is D-
  • if you are wiring a custom board and need explicit DP / DM polarity, confirm it from the board schematic or chip or package documentation

6. Host Bring-Up Guidance

For the current in-tree host Linux stack, use:

  • bsp/common/msg_router/linux_host/userspace/nethub/README.md

Today that host stack follows the default SDIO interface.

For USB projects, keep expectations aligned with current code status:

  • device-side ECM + ACM backend exists
  • host-side transport flattening into the same nethub_vchan behavior as SDIO is not fully documented or aligned in-tree yet

7. USER Virtual Channel

If you need private application messages between host and device, read:

Current implementation:

  • the current in-tree end-to-end USER virtual channel follows the default SDIO interface
  • the public device API is transport-neutral by design
  • the in-tree implementation behind it is still SDIO-backed today

8. Low-Power Note

Low power is currently supported only on BL618DG.

For other chips, examples/wifi/nethub/defconfig automatically turns CONFIG_NETHUB_LOWPOWER_ENABLE off. In practice, you normally keep this option enabled only for BL618DG builds.

9. Common Questions

9.1 bflbwifid Fails to Start

This question is relevant only when you use the optional host control stack.

Check first:

  • whether the device and host control backends match
  • whether /dev/ttyAT0 exists
  • whether mr_sdio.ko has been loaded successfully
  • whether the SDIO hardware link is working properly

9.2 connect_ap Succeeds but the Host Has No Network Access

Check first:

  • whether status has reached GOTIP
  • whether mr_eth0 has an address
  • whether services such as NetworkManager or dhcpcd override the NetHub configuration

Notes:

  • build.sh builds userspace with ENABLE_NETIF_AUTO_CONFIG=1 by default
  • after the device reports GOTIP, the host automatically configures the IP, gateway, and DNS of mr_eth0

9.3 build.sh unload Reports That the Module Is Busy

Check first:

  • whether bflbwifid is still running
  • whether nethub_vchan_app is still running

9.4 How Do I Change the Host-Side Virtual Interface Name mr_eth0?

The default host-side virtual network interface name comes from:

  • bsp/common/msg_router/linux_host/kernel/netdev/mr_netdev.c

The macro is:

#define ETH_DRV_NAME "mr_eth%d"

The first created interface therefore appears as mr_eth0.

To change the interface name, update ETH_DRV_NAME to the pattern you want. For example:

#define ETH_DRV_NAME "nethub%d"

Notes:

  • keep %d if you want Linux to allocate names such as nethub0, nethub1, and so on
  • rebuild the host software after the change and reload the host-side kernel module
  • if any local scripts or service configuration still refer to mr_eth0, update them accordingly

9.5 Can the Host Expose AP and STA at the Same Time?

No. Due to the current software implementation, this is not supported yet.

Current behavior:

  • the host side exposes only one virtual interface at a time
  • the default active Wi-Fi channel is STA

If you need to switch between AP and STA, call nethub_set_active_wifi_channel() directly:

  • use NETHUB_CHANNEL_WIFI_AP to switch to AP
  • use NETHUB_CHANNEL_WIFI_STA to switch to STA
  • the default value is NETHUB_CHANNEL_WIFI_STA

9.6 What Should the Host Side Handle When CONFIG_NETHUB_CTRLCHANNEL_USE_ATMODULE=n?

When CONFIG_NETHUB_CTRLCHANNEL_USE_ATMODULE=n, the optional AT-based host control solution is not part of the build.

What you need to handle yourself:

  • you need your own private control path to carry required messages between host and device
  • this includes, but is not limited to, host netdev link-up handling
  • this also includes host-side IP address and netmask configuration

In short, NetHub still provides the data-path, but the host-side control workflow becomes your own responsibility.

9.7 Why Does ifconfig Not Show the Virtual Interface?

Check first:

  • use a command such as ifconfig -a to list interfaces that are currently down
  • find the virtual interface and bring it up manually, for example: sudo ifconfig mr_eth0 up

Notes:

  • some Linux systems, including newer Raspberry Pi OS releases, run NetworkManager by default
  • because of that, the exact behavior depends on your host environment and may need host-specific analysis

9.8 For Dual-Stack Traffic, Can Users Customize the Filter? Is There Any Difference Between USB and SDIO?

Yes. The default configuration already covers most scenarios, but users can still customize the Wi-Fi RX filter if needed.

Important points:

  • the filter is not bound to one interface type; there is no special filter split between USB and SDIO
  • the current built-in policy is shared by both SDIO and USB
  • you can refer to components/net/nethub/profile/nh_profile_sdio.c and components/net/nethub/profile/nh_profile_usb.c; both use the same built-in Wi-Fi RX policy

Default built-in policy reference:

  • components/net/nethub/profile/nh_profile_builtin.c
  • NH_FILTER_MATCH_8021X: handled locally and not delivered to the host
  • NH_FILTER_MATCH_ARP: handled locally and also delivered to the host
  • NH_FILTER_MATCH_DHCP4: handled locally
  • NH_FILTER_MATCH_ICMP4: handled locally
  • other packets: delivered to the host by default

If the default policy does not match your requirement:

  • you can call nethub_set_wifi_rx_filter(nethub_wifi_rx_filter_cb_t filter_cb, void *user_ctx) from components/net/nethub/include/nethub_filter.h
  • for the callback behavior, refer to nh_filter_apply_policy() in components/net/nethub/core/nh_filter.c
  • if you need a more complex policy, it is also fine to contact us directly

9.9 Why Can the Host Not Ping Other Devices on the Same LAN?

This is expected with the current default policy.

Reason:

  • ICMP packets are handled locally on the device side by default
  • they are not delivered to the host by default

So, by default:

  • other LAN devices pinging the device can work
  • host-side ping visibility to other LAN devices is not part of the default behavior

10. Where to Go Next