- 开发环境搭建
参考官网说明:
3. 开发环境安装说明 — JL Project Documentation
- SDK工程编译和下载
参考官网说明:
4. SDK工程编译与下载 — JL Project Documentation
网上下载的SDK第一次编译下载出错,是因为download.bat文件格式问题,要转换。
- 下载的SDK,timer.c的一个错误,左移10位改为左移2位。
- 底层UART修改
BIT(14)代表接收到一个字节,BIT(12)清除RXPEND
UART初始化函数,BIT(3)开启RX中断,BIT(0)使能UART
- 底层SPI
这几个地方用来修改SPI的模式
- SDK的Debug引脚配置
在board_demo.c中
- 工程里面添加文件,配置头文件路径,添加库文件。
可以添加文件和添加整个文件夹
在build options,添加头文件路径
添加库文件
- 开发工程调试,
在Start.s里面程序异常会进入异常解析函数
异常解决函数在debug.c里面,屏蔽release()函数,否则程序异常了会调用软复位,看不到异常信息了。
关于调试打印的异常信息,参考官网:
5.1. 串口调试 — JL Project Documentation
- 栈大小的修改
在Start.s里面可以修改栈大小,usp是用户函数使用的栈空间,ssp的中断函数使用的栈空间
可以通过下面方式打印栈地址。
- RAM分散文件
查看sdk_ld.c文件。
程序的RAM分配情况,可以查看编译器的Build log,里面有大小,和起始地址。
也可以查看tools文件夹下的symbol_tbl.txt文件。
AC569的RAM是两块,
堆空间大小,RAM0:(prp_bss地址到---0x2BF00),RAM1:(clock_bss+4地址到---0x30000)
- 编库工程创建
创建工程时,选择Static Library,然后添加要编库的文件到工程,编译。
- flash操作
关闭VM区,用户写flash时的起始地址从哪里开始。
关闭VM区,再boot.c里面有main函数,把vm_init_app()注释掉,resfile_init()函数的返回值就是用户可以操作flash的起始地址。
当VM区关掉后,也可以看编译输出信息,VM_START_ADDR:这个地址就是用户可以操作flash的起始地址。
Flash使用,需要先调用初始化函数,然后再调用读写API。
在使用flash之前,先调用flash_read_write_init()完成对flash的初始化,
Flash读接口。使用flash_read_buff();需要修改这个API,否则读flash时间会长。使用norflash_read();
Addr = 需要从用户可以操作的地址开始,也就是resfile_init()的返回值(前提是把VM区关闭)。
Flash写接口flash_write_buff()。
- 双备份升级
升级开始要调用这个函数进入升级,UART接收数据包是在中断中接收的,第一次接收到升级数据包,会调用update_download_opt函数进行update初始化。后续都是在中断中接收完数据包然后处理。
Update_download_opt函数在user_msg_handler函数中调用,user_msg_handle然后在main.c里面调用。
在main.c里面开始判断flash中的标志是否为0x05060708,是进入升级模式,否则运行APP程序。
2、Burn标志位置
烧录标志在flash的位置。SFINT_ENDPAGE的大小不需要管。BURN_FLAGSTARTPAGE的计算方式为,编译器输出的信息中VM_START_ADDR/512。
在设置BURN_FLAGSTARTPAGE时候,要使START_MB_ADD地址能够被4K整除,否则存储模板的时候会多写一次。
- 进入升级模式命令
1A指令,1擦除系统参数初始化标志,2设置burn标志,进入update,3软复位。
- 串口升级规范
1、数据包格式
SyncData0:固定为0xAA
SyncData1:固定为0x55
Cmd_len:Cmd_data部分的长度
Cmd_data:命令内容
Cc16:整个命令包(去除crc自身)的crc结果。
- 升级命令:(0x01) update_start
- 升级数据请求:(0x02)update_read_req
- 升级结束:(0x03)update_stop
- 升级结束返回:(0x03)update_stop_res
- 升级长度通知:(0x04)update_len_notify
- 升级在线通知:(0x05)update_alive_notify