AC7911从入门到精通

AC7911 从入门到精通:杰理双核 Wi-Fi+蓝牙 AIoT SoC 全解析


目录

  1. 芯片概述与市场定位
  2. [杰理 AC79 系列芯片谱系](#杰理 AC79 系列芯片谱系)
  3. [架构全景:双核 DSP、总线与内存](#架构全景:双核 DSP、总线与内存)
  4. [Wi-Fi 子系统详解](#Wi-Fi 子系统详解)
  5. 蓝牙子系统详解
  6. [ISP 图像信号处理器与视频能力](#ISP 图像信号处理器与视频能力)
  7. 音频子系统详解
  8. [显示接口与 UI 框架](#显示接口与 UI 框架)
  9. 外设接口全览
  10. 电源管理与低功耗模式
  11. 开发环境搭建完整流程
  12. [SDK 工程结构详解](#SDK 工程结构详解)
  13. 编译与烧录实战
  14. [Hello World:第一个应用程序](#Hello World:第一个应用程序)
  15. [Wi-Fi 应用开发实战](#Wi-Fi 应用开发实战)
  16. 蓝牙应用开发实战
  17. [摄像头 + 视频流应用开发](#摄像头 + 视频流应用开发)
  18. 音频播放与录制开发
  19. [实用项目:WiFi 可视门铃](#实用项目:WiFi 可视门铃)
  20. 实用项目:智能音箱故事机
  21. [实用项目:WiFi IPC 网络摄像机](#实用项目:WiFi IPC 网络摄像机)
  22. [AC7911 vs AC792N 对比与升级路径](#AC7911 vs AC792N 对比与升级路径)
  23. 常见问题与排障指南
  24. 进阶学习路线
  25. 参考资料

关键词:AC7911、杰理、JL、Wi-Fi 4、蓝牙 5.0、AIoT、可视门铃、WiFi 摄像头、智能音箱、Code::Blocks

1. 芯片概述与市场定位

1.1 什么是 AC7911?

AC7911 (全称 AC7911B/AC7911BA,属于 AC791N 系列)是珠海杰理科技(Jieli Technology) 推出的 高集成度、低成本 Wi-Fi 4 + 双模蓝牙 AIoT 多媒体 SoC 。它内部集成了双核 320MHz 浮点 DSP 、Wi-Fi 802.11b/g/n、蓝牙 5.0 双模(BR/EDR + BLE)、ISP 图像处理器、音频 Codec(DAC+ADC+MIC 放大器)以及丰富的数字外设,专为音视频无线一体化的物联网终端产品而设计。

一句话总结:AC7911 = 双核 320MHz DSP + Wi-Fi + 蓝牙 + 摄像头 ISP + 音频 Codec + 显示接口,一颗芯片搞定音视频无线连接的全部需求。

1.2 为什么 AC7911 在 IoT 市场如此受欢迎?

传统方案 AC7911 一体化方案
MCU + 外挂 Wi-Fi 模组 + 外挂蓝牙模组 + 外挂音频 Codec + 外挂摄像头 ISP 1 颗 AC7911 解决所有问题
5~7 颗芯片 1 颗芯片
BOM 成本高、PCB 面积大、功耗高 BOM 成本极低、PCB 极小、功耗显著降低
多个厂商协调、协议栈适配复杂 杰理统一 SDK、单一开发环境

1.3 市场定位

维度 说明
目标应用 可视门铃/门锁、WiFi 摄像头、智能音箱、故事机、点读笔、扫码枪、宠物喂食器、婴儿监护器
核心卖点 双核 320MHz DSP、WiFi+蓝牙双模、720P 摄像头 ISP、音频全链路、超低 BOM 成本
出货规模 杰理是全球最大的蓝牙音频 SoC 出货商之一,AC791 系列延续了其成本控制和集成度的优势
封装 QFN48 (6mm×6mm),极小体积
工作温度 -40°C ~ +85°C,满足工业和户外应用

1.4 关键规格速览

参数 规格
CPU 32-bit 双核浮点 DSP @ 最高 320MHz
Cache 32KB I-Cache + 24KB D-Cache
片上 SRAM 578KB
外部存储 SPI Flash 8MB / PSRAM 2MB(部分封装)
Wi-Fi 802.11 b/g/n, 20/40MHz, AP/STA/Monitor, 最高 +17dBm
蓝牙 V5.0 BR/EDR/BLE, 最高 +15dBm, -93dBm RX
ISP 摄像头 DVP/BT656, 720p@30fps JPEG 编码
音频 Codec 1ch 16-bit DAC (15mW@32Ω), 4ch 16-bit ADC, 4ch MIC 放大器
显示接口 SPI/EMI/PAP/RGB888/666, 最高 480×272@15fps
GPIO 28 个,可映射、可唤醒
外设 3×UART, 3×SPI, 1×I²C, 2×SD Host, USB OTG, 10ch 10-bit ADC
硬件加速 FFT/IFFT、AES128/256、SHA128/256、CRC16、真随机数
供电 核心 1.2V / IO 3.3V / RF 1.4V & 3.3V(内置 PMU)
封装 QFN48 (6mm × 6mm)

2. 杰理 AC79 系列芯片谱系

2.1 AC791N (梧桐二代) 家族

杰理将 AC79 系列内部代号为"梧桐"(Wutong),AC791N 为第二代产品:

型号 封装 关键差异
AC7911B QFN48 (6×6mm) 基础型号,2 路 MIC,最常用
AC7915B QFN48 仅支持单路 8-bit DVP 摄像头
AC7916A QFN48 4 通道 DAC(可配 2L+2R 或 L+R)
AC7913A0/A6 QFN48 管脚与 AC7911B 兼容,可直接互换

2.2 与 AC792N (梧桐三代) 的关系

维度 AC791N (梧桐二代) AC792N (梧桐三代)
CPU 主频 320MHz 360MHz
外部 SDRAM 上限 8MB 16MB
AI 加速 基础矩阵/向量加速 轻量 NPU(人脸/物体检测)
图形 无 GPU 2.5D GPU + 2D DMA
显示 SPI / RGB 小屏 MIPI DSI + RGB 大屏
蓝牙 BLE 5.0 BLE 5.4 (AoA/AoD, LE Audio)
摄像头 单摄 (部分双摄) 双摄 + 增强 ISP
参考价格 ¥5~12 ¥8~18

简单选型原则 :不需要大屏、不需要双摄、不需要本地 AI 人脸检测 → AC7911 完全足够,性价比最高。


3. 架构全景:双核 DSP、总线与内存

3.1 系统架构框图

复制代码
                      AC7911B 系统架构
  ┌─────────────────────────────────────────────────────────┐
  │                                                         │
  │  ┌──────────────────────────────────────────────┐       │
  │  │     双核 RISC DSP @ 320MHz                    │       │
  │  │     • 硬件 FPU (单精度浮点)                     │       │
  │  │     • 128 级向量中断, 4 级优先级                │       │
  │  │     • MMU 内存管理单元                          │       │
  │  │     • 32KB I-Cache + 24KB D-Cache             │       │
  │  └─────────────────┬────────────────────────────┘       │
  │                    │                                    │
  │         ┌──────────┼──────────┐                        │
  │         ▼          ▼          ▼                        │
  │  ┌──────────┐ ┌─────────┐ ┌──────────┐                │
  │  │578KB SRAM│ │8MB Flash│ │2MB PSRAM │                │
  │  │(片上)    │ │(SPI)    │ │(SPI)     │                │
  │  └──────────┘ └─────────┘ └──────────┘                │
  │                                                         │
  │  ┌──────────────────────────────────────────────┐       │
  │  │         Wi-Fi 4 + 蓝牙 5.0 双模                │       │
  │  │  • 802.11b/g/n, PTA 共存                      │       │
  │  │  • BR + EDR + BLE 5.0                         │       │
  │  │  • +17dBm WiFi TX / +15dBm BT TX             │       │
  │  └──────────────────────────────────────────────┘       │
  │                                                         │
  │  ┌──────────┐ ┌──────────┐ ┌──────────────────┐        │
  │  │ ISP 图像  │ │ 音频系统  │ │   硬件加速引擎    │        │
  │  │720p@30fps│ │ DAC+ADC  │ │FFT/AES/SHA/CRC/TRNG│       │
  │  │DVP+BT656 │ │ 4ch MIC  │ │                   │        │
  │  └──────────┘ └──────────┘ └──────────────────┘        │
  │                                                         │
  │  ┌──────────────────────────────────────────────┐       │
  │  │          外设矩阵                              │       │
  │  │  • 28 GPIO • 3×UART • 3×SPI • 1×I2C          │       │
  │  │  • 2×SD Host • USB OTG • 10-bit ADC (10ch)    │       │
  │  │  • MCPWM • QDEC • IR • WDT • RTC             │       │
  │  │  • 显示: SPI/EMI/PAP/RGB888/666 推屏           │       │
  │  └──────────────────────────────────────────────┘       │
  │                                                         │
  │  ┌──────────────────────────────────────────────┐       │
  │  │          嵌入式 PMU (电源管理)                  │       │
  │  │  LDO/DC-DC 模式, 多级低功耗睡眠                │       │
  │  └──────────────────────────────────────────────┘       │
  └─────────────────────────────────────────────────────────┘

3.2 双核 DSP 架构

AC7911 的"双核"并非 ARM Cortex 那样的对称多处理(SMP),而是双核 DSP + 硬件调度器的异构架构:

  • 核 0 (主核):运行应用逻辑、协议栈、OS (FreeRTOS)
  • 核 1 (辅核/加速核):处理计算密集型任务(音频编解码、图像处理、FFT、加密)

两个核通过共享 SRAM硬件邮箱/信号量进行通信。杰理 SDK 对双核调度做了很好的封装,大部分开发只需关注单核应用逻辑即可。

3.3 存储器布局

存储器 容量 接口 用途
片内 SRAM 578 KB 内部总线 代码 + 数据(够大多数应用)
SPI Flash 8 MB (典型) SPI (Fast Read) 固件存储、资源文件 (UI 图片/音频)
SPI PSRAM 2 MB (可选) SPI 扩展 RAM,处理大图像/缓冲

4. Wi-Fi 子系统详解

4.1 Wi-Fi 规格

参数 规格
标准 IEEE 802.11 b/g/n
带宽 20 MHz / 40 MHz
MCS 速率 MCS0 ~ MCS7, MCS32
保护间隔 800ns / 400ns (Short GI)
天线 1×1 SISO,支持 PCB 天线或 IPEX
模式 STA (连接路由器) / AP (热点) / Monitor (配网嗅探)
TX 功率 +17 dBm (DSSS 1Mbps) / +16 dBm (MCS0) / +13 dBm (MCS7)
RX 灵敏度 -95 dBm (DSSS 1M) / -92 dBm (MCS0) / -74 dBm (MCS7)
加密 WEP / WPA-PSK(TKIP) / WPA2-PSK(CCMP)
高级特性 帧聚合 (A-MSDU/A-MPDU)、RIFS、STBC、Greenfield、PTA 共存

4.2 Wi-Fi 工作模式

复制代码
┌──────────────┐          ┌──────────────┐
│   STA 模式    │          │   AP 模式     │
│  (客户端)     │          │  (热点模式)   │
│              │          │              │
│  AC7911 ────→ 路由器   │  手机 ────→ AC7911 │
│              │          │              │
│  用途:      │          │  用途:      │
│  连网通信    │          │  本地配网    │
│  云端上传    │          │  直连控制    │
└──────────────┘          └──────────────┘

         ┌──────────────┐
         │ Monitor 模式  │
         │  (混杂监听)   │
         │              │
         │  用途:      │
         │  SmartConfig │
         │  AirKiss 配网│
         └──────────────┘

4.3 配网方式

AC7911 SDK 支持多种主流配网方式:

配网方式 原理 优点 缺点
AirKiss 微信/App 通过 UDP 广播 SSID+密码 用户熟悉 兼容性依赖路由器
SmartConfig TI 私有协议,UDP 组播 速度快 需特定 APP
AP 配网 AC7911 开热点,手机连入配置 兼容性最好 用户操作略多
声波配网 手机发出编码声波 有趣 距离受限

4.4 网络协议栈支持

SDK 基于 lwIP 提供完整的 TCP/IP 协议栈:

协议层 支持
传输层 TCP, UDP
应用层 HTTP/HTTPS, WebSocket, MQTT, CoAP, RTSP/RTP, cURL
安全 mbedTLS (TLS/DTLS)
DNS DNS 客户端, mDNS
其他 DHCP, NTP, SNTP, Ping

5. 蓝牙子系统详解

5.1 蓝牙规格

参数 规格
版本 Bluetooth 5.0 + BR + EDR + BLE
TX 功率 最高 +15 dBm(远超多数竞品的 0~+4 dBm)
RX 灵敏度 -93 dBm
调制 GFSK, π/4 DQPSK, 8DPSK
组网 Piconet (微微网) + Scatternet (散射网)
BLE 特性 广播/扫描/连接、GATT 客户端+服务器

5.2 经典蓝牙 Profile 支持

AC7911 的经典蓝牙(BR/EDR)协议栈非常完整:

Profile 全称 角色 典型应用
A2DP Advanced Audio Distribution Sink / Source 蓝牙音箱、蓝牙耳机
AVRCP Audio/Video Remote Control Target / Controller 播放控制(上下曲/暂停)
HFP Hands-Free Profile AG / HF 免提通话、语音助手
SPP Serial Port Profile Server / Client 串口透传、数据交换
AVCTP / AVDTP 音频控制/分发 --- A2DP/AVRCP 的底层协议
GATT Generic Attribute Profile Server / Client BLE 数据交互

5.3 蓝牙开发模式

复制代码
AC7911 蓝牙角色典范:
┌────────────┐               ┌────────────┐
│  手机       │── A2DP ────→│  AC7911    │  ← 蓝牙音箱模式
│  (Source)  │              │  (Sink)    │
└────────────┘               └────────────┘

┌────────────┐               ┌────────────┐
│  AC7911    │── SPP ─────→│  MCU/外设   │  ← 无线串口透传
│  (Master)  │              │  (Slave)   │
└────────────┘               └────────────┘

6. ISP 图像信号处理器与视频能力

6.1 ISP 规格

参数 规格
接口 DVP (1/2/4/8-bit 并行) + BT656
输入格式 YUV422
最大分辨率 720p @ 30fps
输出格式 YUV422 / YUV420
JPEG 编码 最大 720p @ 30fps,支持 AVI 封装
JPEG 解码 任意尺寸
特殊功能 图像拼接 (176×128@60fps)、YUV 帧缩放、裁剪
双摄支持 一路 DVP + 一路 SPI 摄像头可同时工作

6.2 摄像头选型建议

分辨率 接口 推荐型号 帧率 适用场景
720p DVP 8-bit GC2053 / OV9732 30fps 可视门铃、IPC
VGA (640×480) DVP 8-bit GC032A / BF3905 30fps 低成本监控
QVGA (320×240) DVP 8-bit GC0308 30fps 摄像头玩具
任意 SPI GC032A SPI 接口 15fps 辅助摄像头

7. 音频子系统详解

7.1 音频硬件

模块 参数 说明
DAC 1ch, 16-bit 内置耳机功放,15mW @ 32Ω
ADC 4ch, 16-bit 每通道可独立配置为 MIC 或 LINE-IN
MIC 放大器 4ch 可编程增益,差分/单端
模拟 MUX 4ch 输入源选择
I²S 最高 8ch, 16/24-bit 支持主/从模式,输入+输出
PDM 4ch, 16-bit 数字 MEMS 麦克风接口
SPDIF 1ch 接收 数字音频输入

7.2 音频编解码能力

编码格式 编码 解码 典型码率
SBC 蓝牙 A2DP 标准
AAC 高质量蓝牙音频
MP3 通用音乐格式
OPUS 现代低延迟语音/音乐
ADPCM 低码率语音
AMR 通话编码
PCM / WAV 无损原始音频
APE / FLAC 无损音乐解码
M4A / WMA 通用音乐格式
DTS 多声道解码

7.3 音效处理能力

AC7911 的 DSP 为音频提供了强大的处理能力:

  • AEC (回声消除) --- 支持单/双麦方案,全双工语音通话
  • 降噪 --- 传统降噪 + 神经网络降噪 (AI Denoise)
  • EQ 均衡器 --- 多段参数 EQ
  • DRC (动态范围压缩)
  • 变声/变调 --- 玩具/娱乐类产品常用
  • 啸叫抑制 --- 麦克风-扬声器之间的反馈抑制
  • VAD (语音活动检测)
  • 语音唤醒 (ASR) --- 支持单/双麦打断唤醒("小杰小杰"等)

7.4 音频通路

复制代码
音频输入源 (可选):
  ├── 板载 MIC (模拟/数字 PDM)
  ├── LINE-IN (外部音源)
  ├── 蓝牙 A2DP (手机推流)
  ├── 网络流 (HTTP/RTSP URL)
  ├── SD 卡 / SPI Flash 文件
  └── USB 音频

音频输出目标 (可选):
  ├── 板载 Speaker (DAC + 功放)
  ├── 蓝牙 A2DP (发送到耳机)
  ├── 网络流 (对讲/直播)
  ├── 录音到 SD 卡
  └── I²S 外接 Codec

8. 显示接口与 UI 框架

8.1 显示接口

接口 分辨率 色深 说明
SPI ≤ 320×240 RGB565 最常用的小屏方案
RGB888 ≤ 480×272 24-bit 并口 RGB 屏,15fps
RGB666 ≤ 480×272 18-bit 并口 RGB 屏
EMI 可变 --- 杰理私有接口
PAP 可变 --- 杰理私有接口

注意 :AC7911 没有 MIPI DSI 接口。如果需要驱动高清大屏(720p+),需要升级到 AC792N 系列。

8.2 杰理 UI 工具链

杰理提供了一套轻量级的 UI 开发框架:

  • UI 编辑器:PC 端 WYSIWYG 拖拽式界面设计
  • 触摸驱动:I²C 触摸面板驱动
  • 图层管理:支持多层叠加、透明度混合
  • 资源加载:支持从 SD 卡动态加载图片资源
  • 动效:基础动画支持 (JPG/AVI/GIF 播放)

9. 外设接口全览

外设 数量 关键特性
GPIO 28 个 独立上拉/下拉配置,施密特触发输入,支持外部唤醒和中断
UART 3 个 全双工,支持 DMA,硬件流控
SPI 3 个 主/从模式,支持 Fast Read Quad IO
I²C 1 个 主/从模式,100k/400k
SD 卡 2 路 SD 2.0 主机控制器,支持 TF 卡
USB 1 路 USB 1.1 FS OTG / USB 2.0 HS OTG
ADC 10 通道 10-bit SAR ADC
MCPWM --- 16 位 PWM,用于电机驱动
QDEC 1 个 正交解码器(旋转编码器)
定时器 多功能 32-bit 捕获 + PWM 模式
看门狗 独立 WDT
RTC 独立实时时钟
电容触摸 多通道
IR 红外 接收

10. 电源管理与低功耗模式

10.1 供电架构

AC7911 内置 PMU(电源管理单元),支持多电压域独立控制:

电压域 电压 供电对象
VDD_CORE 1.2V CPU 核心 + 片内 SRAM
VDD_IO 3.3V GPIO + 数字外设
VDD_RF 1.4V / 3.3V Wi-Fi + 蓝牙射频
VDD_ANA 3.3V 音频 Codec + ADC/DAC

10.2 低功耗模式

模式 CPU Wi-Fi 蓝牙 唤醒源 典型电流
Active 运行 可选 可选 --- 80~150mA (WiFi+Cam)
Idle 暂停 可选 保持 中断 15~30mA
Sleep GPIO/RTC < 100µA
Deep Sleep 有限 GPIO < 10µA
Off PWRKEY < 1µA

10.3 低功耗设计建议

c 复制代码
// 在不需要网络时关闭 Wi-Fi
wifi_power_off();

// 进入深睡眠,等待 GPIO 按键唤醒
pm_deep_sleep(WAKEUP_GPIO, gpio_mask);

11. 开发环境搭建完整流程

11.1 开发环境概览

AC7911 的开发环境与常见的 ARM MCU 开发有所不同------它使用杰理自研的 Clang 工具链 ,并且需要 License 授权

复制代码
┌────────────────────────────────────────────┐
│   Windows PC                               │
│                                            │
│   Code::Blocks IDE                         │
│   (或 VS Code + Makefile)                  │
│        │                                   │
│        ▼                                   │
│   杰理 Clang 工具链 (需要 License)          │
│        │                                   │
│        ▼                                   │
│   Makefile 构建系统                         │
│        │                                   │
│        ▼                                   │
│   固件 .bin / .ubi / .fw                   │
│                                            │
│   ── USB/J-Link ──→ AC7911 开发板          │
└────────────────────────────────────────────┘

11.2 安装步骤

步骤 1:安装 Code::Blocks IDE
bash 复制代码
# 下载地址(杰理定制版)
# http://pkgman.jieliapp.com/s/codeblocks
# 选择 20.03 版本,按提示安装
# 安装完成后先关闭 Code::Blocks
步骤 2:安装杰理工具链
bash 复制代码
# 下载地址
# http://pkgman.jieliapp.com/s/win-toolchain

# 安装完成后需要生成 Key 码
# Key 码绑定当前电脑 → 发给代理商获取 License 文件
# 导入 License 完成激活

⚠️ 重要:License 绑定电脑硬件,换电脑需要重新申请。开发前务必确保 License 已激活。

步骤 3:安装软件包管理器
bash 复制代码
# 下载地址
# http://pkgman.jieliapp.com/s/pkgmanoffline

# 用于下载和管理 SDK 版本
步骤 4:获取 SDK
bash 复制代码
# 官方 Gitee 仓库
git clone https://gitee.com/Jieli-Tech/fw-AC79_AIoT_SDK.git

# 或 GitHub 镜像
git clone https://github.com/0x0fe/7911b.git

# SDK 文档地址
# https://doc.zh-jieli.com/AC79/zh-cn/master/
步骤 5:配置 VS Code(可选,更推荐)

对于习惯 VS Code 的开发者,可以安装以下插件:

  • C/C++ (Microsoft)
  • Cortex-Debug
  • ARM Assembly

然后在 .vscode/settings.json 中配置工具链路径:

json 复制代码
{
  "ac791.toolchainPath": "D:/jieli-toolchain/bin",
  "ac791.sdkPath": "D:/AC791_SDK",
  "ac791.buildType": "debug",
  "ac791.optimizationLevel": "O2"
}

12. SDK 工程结构详解

12.1 顶层目录结构

复制代码
fw-AC79_AIoT_SDK/
├── apps/                   # ★ 应用层代码(主要工作目录)
│   ├── demo/               #   入门示例工程
│   │   ├── demo_hello/     #     Hello World
│   │   ├── demo_audio/     #     音频播放/录制
│   │   ├── demo_video/     #     视频采集/JPG编码
│   │   ├── demo_edr/       #     经典蓝牙
│   │   └── demo_ble/       #     BLE
│   ├── wifi_camera/        #   WiFi 摄像头工程
│   ├── wifi_ipc/           #   WiFi IPC 工程
│   ├── wifi_story_machine/ #   WiFi 故事机工程
│   ├── scan_box/           #   扫码盒工程
│   ├── module_example/     #   ★ 模块化例程(外设/网络/音频等)
│   └── common/             #   公共代码
├── cpu/                    # CPU 相关(启动代码、烧录工具)
├── include_lib/            # 库头文件
├── lib/                    # 静态库(不开放源码)
├── sdk_tools/              # SDK 工具
├── tools/                  # 开发工具 (make_prompt.bat 等)
├── ui_project/             # UI 工程文件
├── doc/                    # 芯片数据手册 & 原理图
└── Makefile                # 顶层 Makefile

12.2 应用工程内部结构

复制代码
apps/my_app/
├── app_main.c              # 主入口文件
├── app_main.h
├── app_config.h            # 应用配置(功能开关/宏定义)
├── user_cfg.c              # 用户配置 (WiFi SSID/密码等)
├── Makefile                # 工程 Makefile
├── board.c                 # 板级初始化 (GPIO 功能选择)
└── resource/               # 资源文件 (图片/音频/字库)

12.3 核心 API 层次

复制代码
应用层 (apps/)
    │
    ▼
中间件层 (lib/)
├── 网络: lwip, mbedtls, http, mqtt, websocket
├── 音频: mp3, aac, opus, sbc, aec, eq
├── 视频: jpeg, isp
├── 文件系统: fatfs
├── USB:  CDC, UVC, UAC
└── UI:   gui, touch
    │
    ▼
驱动层 (SDK 内部)
├── gpio, uart, spi, i2c, sd, i2s, pwm
└── wifi_drv, bt_drv, dac_drv, adc_drv
    │
    ▼
OS 层
├── FreeRTOS / Pthread API
└── 内存管理 / 消息队列 / 信号量

13. 编译与烧录实战

13.1 Windows 编译

batch 复制代码
:: 方式一:在 SDK 根目录双击运行
tools\make_prompt.bat

:: 在打开的命令行窗口中编译
make -j %NUMBER_OF_PROCESSORS%

:: 或指定工程编译
make ac791n_demo_demo_hello -j32

13.2 Linux 编译

bash 复制代码
# 前提:工具链已解压到 /opt/jieli/

# 提高文件句柄上限(防止链接阶段失败)
ulimit -n 8096

# 多核编译
make -j $(nproc)

# 指定工程
make ac791n_demo_demo_hello -j32

⚠️ Linux 环境仅支持编译,不支持烧录下载。烧录必须在 Windows 下进行。

13.3 烧录流程

方法一:Code::Blocks 一键烧录
复制代码
1. 在 Code::Blocks 中打开工程
2. 编译通过 (Build)
3. 将 AC7911 开发板进入烧写模式:
   a. 按住 UPDATE (或 BOOT) 按键不放
   b. 按一下 RESET 键
   c. 先松开 RESET,再松开 UPDATE
   d. 电脑弹出 "U盘" 盘符 = 成功进入烧写模式
4. 点击 Code::Blocks 的 "构建并运行" 按钮
5. 等待烧写完成
方法二:批处理烧录
batch 复制代码
:: 进入烧录工具目录
cd cpu\wl82\tools\

:: 双击运行
download.bat

13.4 串口调试

引脚 功能
PB3 串口 TX (默认)
GND 串口 GND

串口参数:921600 bps, 8N1(杰理默认高速波特率)

复制代码
典型启动日志:
[00:00:00.100]ML82(AC791N) CHIP_ID: 0x6f00
[00:00:00.100]sys_clk = 320000000, sdram_clk = 192000000...
[00:00:00.100]CODE+CONST_SIZE = 1026368

14. Hello World:第一个应用程序

14.1 创建工程

bash 复制代码
# 复制 demo_hello 作为起点
cp -r apps/demo/demo_hello apps/my_first_app

# 修改 apps/my_first_app/app_main.c

14.2 Hello World 代码

c 复制代码
// apps/my_first_app/app_main.c
#include "app_main.h"
#include "system/includes.h"
#include "devices/gpio.h"

// 应用初始化
static void app_init(void) {
    printf("========================================\n");
    printf("  Hello from AC7911!\n");
    printf("  CPU: Dual-core DSP @ 320MHz\n");
    printf("  Chip ID: 0x%04x\n", get_chip_id());
    printf("========================================\n");

    // 初始化板级 GPIO (LED/按钮等)
    board_init();
}

// 应用主循环 (FreeRTOS 任务)
static void app_task(void *arg) {
    while (1) {
        printf("Tick...\n");
        vTaskDelay(1000);  // FreeRTOS 延时 1 秒
    }
}

// 主入口
void app_main(void) {
    app_init();

    // 创建主任务
    xTaskCreate(app_task, "app_task", 2048, NULL, 5, NULL);
}

14.3 编译与运行

bash 复制代码
make ac791n_my_first_app -j32
# 烧录到开发板 → 观察串口输出

15. Wi-Fi 应用开发实战

15.1 Wi-Fi STA 模式连接路由器

c 复制代码
#include "wifi/wifi_api.h"

void wifi_connect_demo(void) {
    // 1. 初始化 Wi-Fi
    wifi_init();

    // 2. 设置 STA 模式
    wifi_set_mode(WIFI_MODE_STA);

    // 3. 连接路由器
    wifi_connect("MyRouter_SSID", "MyRouter_Password");

    // 4. 等待连接完成(阻塞或回调方式)
    while (wifi_get_state() != WIFI_STATE_CONNECTED) {
        vTaskDelay(100);
    }

    printf("WiFi Connected! IP: %s\n", wifi_get_ip());
}

15.2 HTTP GET 请求

c 复制代码
#include "net/http_client.h"

void http_get_demo(void) {
    http_client_t client;
    char recv_buf[1024];

    http_client_init(&client);
    http_client_set_url(&client, "http://httpbin.org/get");
    http_client_set_method(&client, HTTP_METHOD_GET);
    http_client_set_recv_buf(&client, recv_buf, sizeof(recv_buf));

    int ret = http_client_request(&client);
    if (ret == 0) {
        printf("HTTP Response: %s\n", recv_buf);
    } else {
        printf("HTTP Error: %d\n", ret);
    }

    http_client_deinit(&client);
}

15.3 MQTT 连接云平台

c 复制代码
#include "net/mqtt_client.h"

static void mqtt_on_message(const char *topic, const char *payload) {
    printf("MQTT Recv [%s]: %s\n", topic, payload);
}

void mqtt_demo(void) {
    mqtt_client_t mqtt;

    mqtt_client_init(&mqtt);
    mqtt_client_set_broker(&mqtt, "mqtt.example.com", 1883);
    mqtt_client_set_credential(&mqtt, "device001", "username", "password");
    mqtt_client_set_callback(&mqtt, mqtt_on_message);

    mqtt_client_connect(&mqtt);
    mqtt_client_subscribe(&mqtt, "device/cmd");
    mqtt_client_publish(&mqtt, "device/status", "online");
}

15.4 WebSocket 实时通信

c 复制代码
#include "net/websocket_client.h"

// 连接 WebSocket 服务器
ws_client_connect("ws://server.example.com:8080/ws");

// 发送文本帧
ws_client_send_text("Hello Server!");

// 接收回调
void on_ws_message(const char *data, int len) {
    printf("WS Recv: %.*s\n", len, data);
}

16. 蓝牙应用开发实战

16.1 蓝牙音箱(A2DP Sink)

AC7911 作为蓝牙音箱接收手机推送的音乐:

c 复制代码
#include "bt/bt_api.h"
#include "bt/a2dp_api.h"

void bt_speaker_init(void) {
    // 1. 初始化蓝牙协议栈
    bt_init();

    // 2. 注册 A2DP Sink
    a2dp_sink_init();

    // 3. 设置设备名(手机搜索时看到的名称)
    bt_set_local_name("AC7911-Speaker");

    // 4. 设置为可发现、可连接
    bt_set_discoverable(true);
    bt_set_connectable(true);

    printf("Bluetooth Speaker Ready! Waiting for connection...\n");
}

// A2DP 音频数据回调 → 输出到 DAC
void a2dp_audio_data_callback(uint8_t *data, uint32_t len) {
    // 将 SBC/AAC 解码后的 PCM 送到 DAC 播放
    dac_write(data, len);
}

16.2 BLE 自定义 GATT 服务

c 复制代码
#include "bt/ble_api.h"

// 定义 BLE 服务和特征值
#define SERVICE_UUID     0x1234
#define CHAR_TEMP_UUID   0x2A6E  // 标准温度特征值

static uint16_t temperature = 2300;  // 23.00°C

void ble_sensor_init(void) {
    ble_init();
    ble_set_device_name("AC7911-Sensor");
    ble_add_service(SERVICE_UUID);
    ble_add_characteristic(SERVICE_UUID, CHAR_TEMP_UUID,
                           BLE_PROP_READ | BLE_PROP_NOTIFY,
                           &temperature, sizeof(temperature));
    ble_start_advertising();
}

// 发送通知
void ble_notify_temperature(void) {
    temperature = read_sensor_temp();  // 读取实际温度
    ble_notify(SERVICE_UUID, CHAR_TEMP_UUID,
               &temperature, sizeof(temperature));
}

16.3 蓝牙 SPP 串口透传

c 复制代码
#include "bt/spp_api.h"

void bt_spp_init(void) {
    spp_init();
    spp_register_recv_callback(spp_data_recv);
    bt_set_discoverable(true);
}

// SPP 数据接收回调
void spp_data_recv(uint8_t *data, uint16_t len) {
    printf("SPP Recv: ");
    for (int i = 0; i < len; i++) printf("%02x ", data[i]);
    printf("\n");

    // 透传回复
    spp_send(data, len);
}

17. 摄像头 + 视频流应用开发

17.1 摄像头初始化与采集

c 复制代码
#include "devices/camera.h"

static void camera_init(void) {
    camera_config_t cfg = {
        .interface = CAMERA_IF_DVP_8BIT,
        .sensor    = CAMERA_SENSOR_GC2053,
        .width     = 1280,
        .height    = 720,
        .fps       = 30,
        .format    = CAMERA_FMT_YUV422,
    };
    camera_open(&cfg);
}

// 获取一帧图像
static uint8_t *camera_get_frame(void) {
    return camera_capture_frame();
}

17.2 JPEG 编码

c 复制代码
#include "media/jpeg_encoder.h"

static int encode_jpeg(uint8_t *yuv_data, uint8_t *jpeg_buf,
                       int buf_size, int width, int height) {
    jpeg_encode_param_t param = {
        .width    = width,
        .height   = height,
        .quality  = 80,         // 1~100,越高画质越好
        .format   = JPEG_FMT_YUV422,
    };
    return jpeg_encode(yuv_data, jpeg_buf, buf_size, &param);
}

17.3 RTSP 视频推流

c 复制代码
#include "net/rtsp_server.h"

void start_rtsp_stream(void) {
    rtsp_server_t server;
    rtsp_server_init(&server, 554);  // RTSP 默认端口
    rtsp_server_set_video_callback(&server, get_next_jpeg_frame);

    printf("RTSP Server started: rtsp://<IP>:554/stream\n");
}

18. 音频播放与录制开发

18.1 MP3 播放(从 SD 卡)

c 复制代码
#include "media/mp3_decoder.h"
#include "fs/fatfs.h"

void play_mp3_from_sd(const char *filename) {
    FIL file;
    mp3_decoder_t decoder;
    uint8_t pcm_buf[4096];
    uint8_t mp3_buf[2048];
    UINT bytes_read;

    // 打开 MP3 文件
    f_open(&file, filename, FA_READ);
    mp3_decoder_init(&decoder, 44100, 2);  // 44.1kHz 立体声

    while (1) {
        f_read(&file, mp3_buf, sizeof(mp3_buf), &bytes_read);
        if (bytes_read == 0) break;

        int pcm_len = mp3_decoder_decode(&decoder, mp3_buf,
                                          bytes_read, pcm_buf);
        dac_write(pcm_buf, pcm_len);  // 输出到扬声器
    }

    mp3_decoder_deinit(&decoder);
    f_close(&file);
}

18.2 MIC 录音到 SD 卡

c 复制代码
#include "devices/adc.h"
#include "media/wav_encoder.h"

void record_mic_to_sd(const char *filename, int duration_sec) {
    FIL file;
    wav_header_t wav_hdr;
    int16_t pcm_buf[512];
    int total_samples = duration_sec * 16000;

    // 创建 WAV 文件
    f_open(&file, filename, FA_CREATE_ALWAYS | FA_WRITE);
    wav_header_init(&wav_hdr, 16000, 16, 1);  // 16kHz 16bit 单声道
    f_write(&file, &wav_hdr, sizeof(wav_hdr), NULL);

    // 初始化 ADC (MIC 输入)
    adc_init(ADC_CH_MIC, 16000);

    for (int i = 0; i < total_samples; i += 512) {
        adc_read(pcm_buf, 512 * sizeof(int16_t));
        f_write(&file, pcm_buf, sizeof(pcm_buf), NULL);
    }

    f_close(&file);
}

19. 实用项目:WiFi 可视门铃

19.1 系统架构

复制代码
门口机 (AC7911)                    室内/手机
┌────────────────────┐          ┌──────────┐
│ 摄像头 (GC2053)     │          │ 手机 APP  │
│      │             │  WiFi    │          │
│      ▼             │ ◄──────► │ 可视对讲  │
│  AC7911 ──┤Speaker│          │ 远程开门  │
│  (QFN48)   │ MIC  │          └──────────┘
│      │             │
│  按钮/触摸          │           ┌──────────┐
│  门锁继电器          │           │ 室内分机  │
│  IR LED (夜视)      │           │ (可选)    │
└────────────────────┘           └──────────┘

19.2 核心功能模块

c 复制代码
// 1. 按下门铃按钮 → 推送到手机 APP (MQTT/WebSocket)
void doorbell_button_pressed(void) {
    // 拍照一张
    jpeg_encode(camera_get_frame(), snapshot_buf, ...);
    // 通过 MQTT 推送到云端/手机
    mqtt_publish("doorbell/event", "{\"ring\":1}");
    mqtt_publish_binary("doorbell/snapshot", snapshot_buf, snap_len);
    // 本地播放叮咚提示音
    audio_play_prompt("/res/dingdong.mp3");
}

// 2. 手机 APP → 发起实时视频通话 (WebRTC/RTSP)
void start_video_call(void) {
    rtsp_server_start();
    aec_enable(true);  // 开启回声消除
    adc_start();       // 开始收音
    dac_start();       // 开始播音(接收手机端语音)
}

// 3. 手机 APP → 远程开锁
void remote_unlock(void) {
    gpio_set(LOCK_RELAY_PIN, 1);   // 继电器吸合
    vTaskDelay(3000);             // 保持 3 秒
    gpio_set(LOCK_RELAY_PIN, 0);   // 释放
}

20. 实用项目:智能音箱故事机

20.1 系统架构

复制代码
           云端内容平台
                │
           WiFi (HTTPS)
                │
   ┌────────────▼────────────┐
   │        AC7911            │
   │                          │
   │  WiFi ──→ 下载故事/儿歌  │
   │  Bluetooth ←── 手机推流  │
   │  SD 卡 ──→ 本地播放      │
   │  DAC ──→ Speaker (3W)   │
   │  ADC ←── MIC (语音控制)  │
   │  SPI LCD (状态显示)      │
   │  GPIO ←── 实体按键       │
   └─────────────────────────┘

20.2 关键代码片段

c 复制代码
// 语音唤醒 (VAD)
void voice_wakeup_init(void) {
    vad_init();
    vad_register_wakeup_word("小杰小杰");
    vad_set_callback(on_wakeup_detected);
}

void on_wakeup_detected(void) {
    // 播放提示音
    audio_play_prompt("/res/ding.wav");

    // 录音 → 云端 ASR → 云端 NLP → 云端 TTS → 本地播放
    record_and_send_to_cloud();
}

// 多种音频源切换
void play_audio( audio_source_t src, const char *uri) {
    switch (src) {
    case AUDIO_SRC_SD:
        mp3_player_play(uri);
        break;
    case AUDIO_SRC_BT:
        a2dp_sink_start();
        break;
    case AUDIO_SRC_NETWORK:
        http_audio_stream_play(uri);
        break;
    }
}

21. 实用项目:WiFi IPC 网络摄像机

21.1 核心功能

复制代码
┌──────────┐     WiFi     ┌──────────┐
│  AC7911   │◄──────────►│  云端/NVR │
│           │             │          │
│  720p CAM │── H.264/JPEG ──→ RTSP/RTMP 推流
│  MIC     │── 音频采集 ──→  对讲
│  Speaker │←── 音频播放 ──  远程喊话
│  SD 卡   │── 本地录像 ──→  循环覆盖
│  IR LED  │── 夜视自动切换
│  PIR     │── 人体感应触发报警
└──────────┘

21.2 录像到 SD 卡

c 复制代码
void record_video_to_sd(void) {
    FIL avi_file;
    avi_header_t avi_hdr;
    uint32_t frame_count = 0;

    f_open(&avi_file, "0:/record.avi", FA_CREATE_ALWAYS | FA_WRITE);
    avi_header_init(&avi_hdr, 1280, 720, 30);

    while (recording) {
        uint8_t *jpeg_frame = camera_get_jpeg();
        int jpeg_size = camera_get_jpeg_size();

        // 写入 AVI 帧
        avi_write_frame(&avi_file, &avi_hdr, jpeg_frame,
                        jpeg_size, frame_count++);

        // 30fps → 每帧 33ms
        vTaskDelay(33);
    }

    avi_header_finalize(&avi_file, &avi_hdr);
    f_close(&avi_file);
}

22. AC7911 vs AC792N 对比与升级路径

22.1 核心差异总结

维度 AC7911/791N AC792N
CPU 双核 320MHz DSP 双核 360MHz DSP
片上 SRAM 578KB 578KB
外部 SDRAM 2~8MB 8~16MB
AI 推理 基础矩阵加速 轻量 NPU
图形 无 GPU 2.5D GPU + 2D DMA
显示 SPI/RGB ≤480×272 MIPI DSI + RGB 高清大屏
摄像头 单摄 720p 双摄 + 增强 ISP
蓝牙 BLE 5.0 BLE 5.4 (LE Audio, AoA/AoD)

22.2 选型决策

复制代码
你的产品需要什么?

├── "不需要大屏 (<2.4寸),不需要双摄,不需要本地 AI 识别"
│   └── → AC7911 ✅ (成本最优)
│
├── "需要高清大屏 (≥3.5寸 MIPI/RGB),流畅 UI 动画"
│   └── → AC792N ✅ (2.5D GPU)
│
├── "需要双摄像头 (例如门锁:人脸+猫眼)"
│   └── → AC792N ✅
│
├── "需要本地人脸识别/物体检测 (不上云)"
│   └── → AC792N ✅ (内置 NPU)
│
└── "需要 LE Audio / AoA 室内定位"
    └── → AC792N ✅ (BLE 5.4)

23. 常见问题与排障指南

23.1 开发环境问题

问题 原因 解决方法
make 找不到命令 未运行 make_prompt.bat 先双击运行 tools/make_prompt.bat
编译报 undefined reference 库文件链接顺序错误 调整 --start-group--end-group 之间的库顺序
编译报 section overflow 代码/数据超出 SRAM 范围 检查 linker script,优化代码大小
路径含有中文/空格 工具链不支持 将 SDK 移到不含中文和空格的路径
License 无效 电脑硬件变更 重新生成 Key 码,联系代理商
Linux 下编译报 Too many open files 文件句柄数不够 ulimit -n 8096

23.2 烧录问题

问题 原因 解决方法
无法进入烧写模式 按键时序不对 "按住 UPDATE → 按一下 RESET → 松开 RESET → 松开 UPDATE"
烧录时 "Device Offline" 芯片未进入烧写模式 / USB 连接问题 检查 USB 线,重新按流程进入烧写模式
烧录后不运行 固件不匹配 检查 board.c 中外设配置是否与硬件一致
Linux 无法烧录 Linux 不支持烧录 切到 Windows 完成烧录

23.3 运行时问题

问题 原因 解决方法
HardFault 栈溢出 增大任务的 Stack_Size
Wi-Fi 连接失败 SSID/密码错误或信号弱 检查 SSID/密码,确认路由器 2.4G 频段已开启
Wi-Fi 连接慢 电源纹波干扰 检查 3.3V 供电纹波
Wi-Fi 距离近 天线不匹配 检查 PCB 天线设计/匹配网络
蓝牙搜不到 未设置为可发现 bt_set_discoverable(true)
摄像头花屏 DVP 线序不对 / MCLK 频率不匹配 检查摄像头线序,确认 sensor 时钟配置
音频噪声 MIC/SPK 地线回路 优化 Layout 地线,检查电源退耦
功耗偏高 未进入低功耗模式 / GPIO 悬空 未用 GPIO 配置为上拉或输出低电平

23.4 调试技巧速查

bash 复制代码
# 查看芯片 ID
printf("CHIP_ID: 0x%04x\n", get_chip_id());

# 查看剩余内存
printf("Free Heap: %d bytes\n", xPortGetFreeHeapSize());

# 查看任务状态
vTaskList(buf);  # FreeRTOS 任务列表

# 查看 Wi-Fi 状态
wifi_dump_status();

# 查看蓝牙连接状态
bt_dump_connections();

# 串口打印重定向到特定 UART
uart_set_debug_channel(UART1);

24. 进阶学习路线

复制代码
阶段 1:入门 (1 周)
├── 搭建开发环境 (Code::Blocks + 工具链 + License)
├── 获取并编译 SDK 中的 demo_hello
├── 烧录到开发板,观察串口输出
├── 修改代码,控制 GPIO 输出 (LED 闪烁)
└── 学习 GPIO 输入 (按键检测)

阶段 2:基础外设驱动 (2 周)
├── UART 收发 (与 PC 通信)
├── I²C 传感器驱动 (温湿度/加速度)
├── SPI Flash 读写
├── ADC 采样 (电池电压监测)
├── PWM 输出 (背光调节/电机控制)
└── SD 卡文件系统 (FATFS)

阶段 3:无线连接 (3 周)
├── Wi-Fi STA 连接路由器 + HTTP 请求
├── Wi-Fi AP 模式 + Web 配网
├── MQTT 连接阿里云/腾讯云 IoT 平台
├── WebSocket 双向通信
├── 经典蓝牙 A2DP Sink (蓝牙音箱)
├── 经典蓝牙 SPP 透传
└── BLE 自定义 GATT 服务

阶段 4:音视频开发 (4 周)
├── 摄像头初始化 + JPEG 编码
├── RTSP/RTMP 视频推流
├── MP3/AAC 音频播放 (SD 卡 + 网络流)
├── MIC 录音 + WAV 存储
├── 回声消除 (AEC) 对讲
├── 语音唤醒 (VAD + ASR)
└── LCD 显示 + UI 框架

阶段 5:产品化 (4~6 周)
├── 低功耗优化 (Sleep/Deep Sleep)
├── OTA 固件远程升级
├── 安全启动 (Secure Boot)
├── 产测流程设计 (校准/检验)
├── 硬件 PCB 设计 (天线匹配 + EMC)
└── 批量生产与认证 (FCC/CE/SRRC)

25. 参考资料

官方资源

  1. AC791 官方文档 --- doc.zh-jieli.com/AC79/zh-cn/master/
  2. 工具链说明 --- doc.zh-jieli.com/Tools/zh-cn/dev_tools/toolchains/
  3. 编译与下载 --- doc.zh-jieli.com/AC79/zh-cn/master/getting_started/project_download/
  4. AC7911B 数据手册 --- zh-jieli.com
  5. 杰理 AC791N/AC792N 培训资料 --- yunthinker.com

SDK 与开源

  1. SDK Gitee 仓库 --- gitee.com/Jieli-Tech/fw-AC79_AIoT_SDK
  2. GitHub 开源代码 --- github.com/0x0fe/7911b
  3. 杰理 AC791 方案 (网易云信) --- doc.yunxin.163.com

社区与技术支持

  1. 杰理技术社区 --- doc.zh-jieli.com/AC79/zh-cn/release_v1.2.0/other/community/
  2. 华秋商城 AC7911 采购 --- hqchip.com
  3. 立创商城 AC7911 采购 --- szlcsc.com
  4. 钉钉技术支持群 --- SDK 内 README 文件中的群号

版权声明 :本文由作者原创撰写,仅供学习和交流使用。文中技术参数来源于杰理科技官方数据手册及 SDK 公开文档,如有疏漏欢迎在评论区指正。

转载声明 :如需转载,请联系作者获得授权,并注明出处。

免责声明:本文所述代码示例和电路方案仅供学习参考,实际产品设计请以杰理科技官方最新数据手册和 SDK 文档为准。


相关推荐
worxfr2 小时前
Go 并发控制:从 Channel 方向约束到实战模式
开发语言·后端·golang
带鱼吃猫2 小时前
预处理器:宏、运算符与条件编译
c语言·开发语言
小小龙学IT3 小时前
C++ std::vector 底层实现深度解析:内存布局、扩容策略、移动语义与迭代器失效
开发语言·c++·算法
gscsded3 小时前
AUTOSAR CanTp 模块学习笔记
单片机·嵌入式硬件·汽车
eBest数字化转型方案3 小时前
从工程视角拆解冰柜资产管理:拍照识别 pipeline、纯净度算法与 IoT 选型踩坑
人工智能·物联网·算法
TDengine (老段)3 小时前
TDengine taosAdapter — 多协议网关详解
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
码匠许师傅3 小时前
【C++ 面试真题】聊聊 volatile 和 mutable
开发语言·c++·面试
Hello_Damon_Nikola3 小时前
扰流筋从原理到应用
人工智能·单片机·嵌入式硬件
某林2123 小时前
从“仿真能跑”到“真机能走”:一套轮腿机械狗强化学习系统的工程化实践
人工智能·stm32·嵌入式硬件·架构·机器人·机械狗