手把手教你搞定杰理AC695 SDK v1.4.0的编译与下载(附常见错误修复)
2026/5/6 16:54:32 网站建设 项目流程

杰理AC695 SDK v1.4.0开发实战:从环境搭建到固件烧录全指南

第一次接触杰理AC695芯片的开发者,往往会被其丰富的功能和相对复杂的开发环境所困扰。作为一款广泛应用于蓝牙音频、智能家居等领域的MCU,AC695的性能和灵活性确实令人印象深刻,但SDK的配置过程却可能成为新手的第一道门槛。本文将带你系统性地完成从零开始的环境搭建、工程编译到固件烧录的全流程,特别针对v1.4.0版本中的典型问题提供解决方案。

1. 开发环境准备与SDK获取

在开始之前,我们需要准备以下硬件和软件环境:

  • 硬件准备

    • 杰理AC695开发板(如AC63系列)
    • USB转串口调试工具(如CH340)
    • 标准Micro USB数据线
  • 软件环境

    • Windows 10/11 64位系统
    • JL IDE(杰理官方开发环境)
    • Git for Windows(用于版本控制)
    • Notepad++或VS Code(推荐用于代码编辑)

重要提示:确保你的Windows系统用户名不包含中文或特殊字符,这可能导致后续编译路径问题。建议在C盘根目录下创建工作文件夹,例如C:\JL_AC695

获取SDK的官方途径是通过杰理开发者平台,但需要注意v1.4.0版本可能存在以下文件差异:

SDK目录结构 ├── docs # 官方文档 ├── examples # 示例代码 ├── include # 头文件 ├── lib # 预编译库 ├── project # 工程模板 ├── tools # 工具链 └── utilities # 实用工具

初次下载后,建议立即进行以下操作:

  1. 备份原始SDK压缩包
  2. 解压到工作目录
  3. 右键检查文件夹属性,确保没有"只读"标记

2. 工程配置与编译排错

2.1 解决download.bat文件格式问题

初次编译时最常见的错误来源于download.bat文件的格式问题。这是因为从官网下载的SDK可能在Windows环境下出现换行符不兼容的情况。解决方法如下:

# 使用Notepad++转换格式 1. 右键用Notepad++打开download.bat 2. 点击菜单"编辑"→"文档格式转换"→"转换为Windows格式(CR LF)" 3. 保存文件 # 或者使用命令行工具 > dos2unix download.bat > unix2dos download.bat

2.2 timer.c源码修正

在v1.4.0版本中,timer.c文件存在一个需要手动修正的错误:

// 错误代码(原版): timeout = (timeout << 10) / ticks_per_us; // 修正为: timeout = (timeout << 2) / ticks_per_us;

这个修改直接影响定时器的精度,如果不修正会导致定时功能异常。建议在修改后重新编译整个工程,并运行简单的定时器测试用例验证效果。

2.3 调试串口配置

AC695的UART配置需要特别注意以下几个关键位:

寄存器位功能描述推荐设置
BIT(14)接收数据中断标志保持默认
BIT(12)清除接收挂起状态按需操作
BIT(3)开启接收中断必须设置
BIT(0)使能UART功能必须设置

典型的初始化代码如下:

void uart_init(void) { /* 波特率设置 */ UART_BAUD = (CLK_SYS_HZ / 115200) - 1; /* 使能UART和接收中断 */ UART_CON = BIT(0) | BIT(3); /* 其他配置... */ }

3. 内存管理与调试技巧

3.1 栈空间配置优化

Start.s汇编文件中,可以调整两个关键的栈空间大小:

  • 用户栈(usp):用于普通函数调用
  • 系统栈(ssp):用于中断服务例程
; 默认配置(可能不足) __user_stack_size__ EQU 0x400 __system_stack_size__ EQU 0x200 ; 推荐调整为(复杂应用场景) __user_stack_size__ EQU 0x800 __system_stack_size__ EQU 0x400

调试时可以添加以下代码打印栈使用情况:

extern uint32_t __user_stack_end__; extern uint32_t __system_stack_end__; void print_stack_info(void) { printf("User stack end: 0x%08X\n", &__user_stack_end__); printf("System stack end: 0x%08X\n", &__system_stack_end__); }

3.2 RAM分配策略

AC695采用双RAM架构,合理分配内存对性能至关重要。查看sdk_ld.c和编译日志可以获取以下关键信息:

Build log示例: RAM0: 0x20000000 - 0x2002BFFF (176KB) RAM1: 0x30000000 - 0x3000FFFF (64KB)

堆空间计算技巧

  • RAM0可用空间:prp_bss地址到0x2BF00
  • RAM1可用空间:clock_bss+4地址到0x30000

建议将频繁访问的数据放在RAM0,大块缓冲区考虑使用RAM1。

4. Flash操作与固件升级

4.1 Flash基础操作

关闭VM区是进行用户Flash操作的前提:

// 在boot.c中注释掉vm_init_app() // void main(void) // { // // vm_init_app(); // 注释这一行 // resfile_init(); // }

获取可操作Flash起始地址的方法:

uint32_t flash_base_addr = resfile_init(); printf("User flash starts at 0x%08X\n", flash_base_addr);

Flash操作标准流程:

  1. 初始化:flash_read_write_init()
  2. 读操作:优化后的norflash_read()
  3. 写操作:flash_write_buff()

重要提示:写操作前必须确保地址4K对齐,否则会导致异常。

4.2 双备份升级机制

AC695支持通过串口进行可靠的双备份升级,关键流程如下:

  1. 检测升级标志(0x05060708)
  2. 进入升级模式(发送1A指令)
  3. 数据包格式处理

典型升级命令包结构:

字段长度说明
SyncData010xAA同步头
SyncData110x55同步头
Cmd_len2可变命令数据长度
Cmd_dataN可变实际命令内容
Cc162计算值CRC16校验

关键升级命令枚举:

typedef enum { UPDATE_START = 0x01, // 开始升级 UPDATE_READ_REQ = 0x02, // 数据请求 UPDATE_STOP = 0x03, // 结束升级 UPDATE_LEN_NOTIFY = 0x04, // 长度通知 UPDATE_ALIVE_NOTIFY = 0x05 // 在线通知 } update_cmd_t;

在实际项目中,我们发现最稳定的升级波特率是115200,更高的速率可能导致数据包丢失。升级过程中建议添加超时重传机制,每个数据包等待确认后再发送下一个。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询