aic8800 0.1.0

AIC8800 Wi-Fi driver core (SDIO, firmware, WPA2, SoftAP). OS-independent; runtime capabilities are injected via aic8800::WifiRuntime.
docs.rs failed to build aic8800-0.1.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.

aic8800

AIC8800 系列 WiFi 芯片驱动核心,通过 SDIO 总线通信。OS 无关:核心代码不直接 依赖任何操作系统运行时;定时、休眠、让步、任务派生等能力通过 aic8800::WifiRuntime trait 注入,由上层 OS glue 在初始化时调用 aic8800::set_runtime 安装。

支持芯片:AIC8801、AIC8800DC、AIC8800D80、AIC8800D80X2。

用法

平台相关的资源(MMIO 映射、SDHCI 枚举、IRQ 注册)由上层 OS glue 负责;本 crate 从 一个已就绪的 SDIO host 开始完成芯片侧 bring-up,并返回一个 AicWifiNetDev——它 同时是数据面(rd_net::Net 设备)和控制面(实现 rd_net::WifiControl)。

// 1. OS glue 注入运行时能力(一次,进程级)
aic8800::set_runtime(MY_RUNTIME);

// 2. 用已枚举好的 SDIO host 探测芯片,得到设备句柄
let mut wifi = aic8800::probe(sdio)?;   // -> AicWifiNetDev

// 3. SoftAP 或 STA(rd_net::WifiControl)
wifi.start_ap_open(b"MyAP", 6)?;          // 开放 SoftAP
// wifi.connect("SSID", "password")?;     // 或连接 STA

// 4. 把设备交给 ax-driver 注册进 rd-net / ax-net 设备模型

运行时能力通过 trait 注入,不直接依赖 OS crate:

  • aic8800::WifiRuntimenow_nanos / sleep_ms / yield_now / 轮询任务派生等,由 OS glue 实现并经 set_runtime 安装。
  • 接收数据帧的唤醒走 rd_net::WifiControl::set_rx_wake 注册的回调(SDIO Wi-Fi 走带外 RX,不经以太网 IRQ 框架)。

模块

src/
├── lib.rs              # crate 入口,re-export(probe / WifiRuntime / set_runtime)
├── common/             # 芯片型号、SDIO 寄存器地址、CRC 等常量
├── runtime.rs          # WifiRuntime 注入点(全局 set-once)
├── wireless/           # probe() 入口
├── fw/                 # 固件加载
│   ├── chip/           #   芯片版本检测与验证
│   ├── config.rs       #   BSP 系统配置常量
│   ├── firmware/       #   固件二进制选择与上传
│   └── protocol/       #   IPC 传输层 (SDIO CMD53 内存读写)
└── fdrv/               # WiFi 驱动核心
    ├── consts.rs       #   协议常量
    ├── core/           #   总线管理、SDIO 传输、初始化、PollSet
    ├── crypto/         #   WPA2-PSK 四次握手 (PRF、AES-CCM、MIC)
    ├── net/            #   网络设备适配 (rd-net / rdif-eth)
    ├── protocol/       #   LMAC 命令/响应、扫描、连接、密钥安装
    ├── thread/         #   RX/TX/AP 轮询任务
    └── wifi/           #   高级 API (WifiClient) 和连接管理

支持的安全模式

  • Open (无加密)
  • WPA2-PSK / CCMP

固件

固件二进制(AICSemi 厂商 blob)不随 crate 分发,也不提交到仓库、不进发布 tarball。build.rs 在编译时把它们准备到 OUT_DIR/firmware/src/fw/firmware/data.rs 再从那里 include_bytes! 嵌入;每个文件都按 SHA-256 逐字节校验。

build.rs 的固件来源优先级(命中即止):

  1. $AIC8800_FIRMWARE_DIR/<name> — 显式本地缓存 / 离线镜像目录。
  2. 仓库内 components/aic8800/firmware/<name> — 由 cargo xtask 预下载填充; 在本仓库内(含离线)编译时走这条,不联网
  3. 从上游 pin 的 commit 下载 — 用于脱离本仓库的独立构建(如 crates.io)。

清单、摘要与上游 pin 见 build.rsscripts/axbuild/src/firmware.rs(两份保持同步), 来源与文件列表见 firmware/README.md

因此发布包可独立构建:cargo publish 校验 tarball 时会执行本 crate 的 build.rs 自行准备固件,不依赖仓库根目录 cargo xtask 的预下载副作用。

依赖

  • sdio-host-cv1800 — SDIO 总线抽象 trait
  • sdhci-cv1800 — SG2002 SDHCI 控制器实现
  • rd-net / rdif-eth / dma-api — 网络设备能力与 WifiControl 控制面 trait
  • aes, hmac, sha1, pbkdf2 — WPA2 密钥派生