KDocs 研发资料库
  • 音频技术应用文档入口汇总
  • 杰理WINDOWS环境安装及其他事项
  • LINUX安装和编译
  • Linux环境编译SDK教程(ubuntu18.04)
  • 音频类补丁汇总表
  • 认证资料获取汇总(最新资料后台会更新)
  • 《Hi-Res申请指南v1.0》
  • FreeRTOS 开源协议版本
  • uCOS 开源协议版本信息
  • 各个模块关键资料汇总
  • 软件调试方法
  • Makefile编译
  • 提bug的规范
  • 常规设备使用指导
  • 对外特别发布开发注意点信息汇总
  • AD697X软件问题整理
  • AC700N软件问题整理
  • AC701X耳机软件问题整理
  • 951&961软件问题整理
  • AC104X软件问题整理
  • AC128N问题整理文档
  • 可视化工具调试问题整理
  • 耳机资料汇总
  • AC704N、 AC705N相关应用
  • AC695N&AC696N&AC608N音箱问题整理
  • JL701N音箱问题整理
  • AC692X软件问题整理
  • AC706N音箱问题整理
  • JL701N音箱问题整理(可视化工具SDK)
  • JL703N音箱问题整理
  • JL709N(JL689N)音箱问题整理
  • JL7094系列-入门到进阶开发指导
  • AC210N音箱问题整理
  • 无线麦系列版本支持指南
  • AW32N无线麦问题整理
  • lAD697X&JL701X 无线麦软件共性问题整理
  • AC706N无线麦问题整理
  • AW36N无线麦问题整理
  • AC710X无线麦问题整理
  • 唤醒源获取及唤醒IO设置
  • 电源
  • LVD
  • 长按复位配置方法
  • 低功耗应用
  • TIMER
  • UART
  • SPI
  • 内部FLASH空间添加用户自定义区域
  • IIC
  • GPIO
  • MCPWM
  • SD&U盘
  • 时钟&晶振
  • GPCNT
  • IO口crossbar映射功能
  • 文件系统使用总结
  • 复用应用
  • LINEIN_AUX相关应用
  • IIS音频接口应用
  • SPDIF模式相关(HDMI_ARC、光纤、同轴)
  • PDM LINK
  • 外设相关应用
  • 蓝牙相关
  • 杰理蓝牙距离调试文档
  • TWS耳机配对方式使用及生产把控指南
  • GFP谷歌快连及其认证流程指引
  • 蓝牙发射器(bt_emitter)相关
  • BLE应用
  • 关于提升BLE传输速率说明
  • BLE测试数据
  • MUSIC 模式相关应用
  • MIDI音乐实现
  • PC相关应用
  • FM相关应用
  • AC695N_AC696N FM天线ESD静电防护措施说明V2.0_20250107
  • fm应用详细设计说明书
  • 杰理FM硬件指南-20230315
  • ADC模块
  • AUDIO相关应用
  • 新Tools的音效调试使用
  • 混响应用使用说明
  • 音效调式
  • 音箱耳机低音小音量增强实现方法
  • DAC输出功率调试
  • DAC性能测试指南
  • 针对各类底噪、电流声分析流程
  • 录音相关应用
  • OPUS编解码相关
  • RTC相关应用
  • 升级相关
  • UI相关应用
  • 通话调试流程指南
  • 通话相关应用
  • 省电容mic使用手册
  • 如何测试验证手表通话系统的语音失真 V1.0
  • AC695X_AC696X_AD697X 常见通话问题处理参考资料
  • 通话调试问题确定步骤
  • 内置触摸调试指南
  • 低功耗内置触摸介绍V2.2
  • 触摸相关文档
  • AC697X、AC698X内置触摸调试及整改方法V1.0
  • 产测相关应用
  • AC63X BLE DUT测试介绍
  • 兆华序列使用简易说明
  • JL_1T2蓝牙测试盒音频文件更换说明
  • ENC相关应用入口汇总
  • ANC相关应用入口汇总
  • JL DMS通话调试手册-V3.9.4
  • ANC-ENC结构设计要点-20240407
  • 半入耳式ANC耳机器件选型与结构设计指南V1.0
  • JL 耳道自适应调试指南
  • ANC相关问题处理
  • ANC调试文档
  • 评估蓝牙耳机通话上行降噪性能的方法 V1.0 (2)
  • FCC 或者 BQB 认证相关应用
  • BQB profile 测试中常遇到的问题点汇总
  • 蓝牙参数整理20210811
  • 杰理科技认证问题参考
  • 无线音频产品开发指南
  • 无线麦系列从入门到进阶开发指导
  • 量产烧录相关说明
  • 一拖八烧录器远程过程调用说明
  • 量产相关建议
  • EffectTool(eq)调试工具说明文档
  • AC897AD697系列的EQ调试方法-V3
  • 杰理调音指南-20220622
  • 音效模块总结
  • 简要调音步骤指引(可视化)
  • 耳机充电与通信调试指南
  • 充电仓硬件调试指南
  • 充电仓软件问题整理
  • AC951常用说明
  • AC951_AC961_开发板使用说明V1.0
  • 彩屏仓AC982 入门指导及FAQ
  • 蓝牙音频APP相关应用
  • 手机APP的简介和开发流程
  • 蓝牙音频系列-硬件设计指南
  • 静电测试及整改方法-20220706
  • TWS耳机底噪整改指南V1.2
  • 杰理蓝牙距离调试文档
  • 蓝牙RF硬件设计与调试V1.1-20250219
  • AC695N_AC696N FM天线ESD静电防护措施说明V2.0_20241228
  • 音效调试指南
  • 无线话筒K歌音箱标准开发流程
  • 杰理科技 700N TWS耳机产品标准-202303
  • 杰理科技 701N 广播产品标准-202303
  • JL-HAT ANC高效产测自适应
  • 无线话筒测试板使用介绍
  • 一拖八频偏校准使用说明
  • 领夹麦产测工具使用介绍
  • Dongle量产测试说明
  • Dongle+Tws或头戴式 SDK通过工具绑定配对功能说明文档
  • 双麦ENC产测宏配置验证方法 V1.0
  • JL耳机方案麦克风声学测试指令_V1.0
  • JL耳机方案麦克风声学测试指令_V2.0
  • JL_ENC自动测试命令_V0.0.1
  • JL蓝牙测试盒用例说明
  • LDAC自测环境搭建_ubuntu
  • 延迟小板使用手册
  • 杰理库文件的制作及添加实现过程
  • 关于 AC635N&AC636N系列免晶振兼容性补丁 说明
  • 关于 AC63系列VM兼容性修复补丁_20250224 说明
  • 关于 AC632N &AE632N_ 蓝牙& 低功耗兼容性修复补丁 说明
  • AD698N和AC638N电压优化补丁V3说明
  • 关于 AC635N&AC636N漏电和E&G版兼容联合补丁 说明
  • AD698N和AC638N电压优化补丁V2说明
  • 702相关应用
  • 2024-4-30 发布歌词显示SDK开发注意事项
  • BQB RF & FCC 认证测试固件问题汇总及源码
  • BQB profile 测试中常遇到的问题点汇总
  • 进dut测试模式方法及固件
  • 704-频偏修改bin文件合集
  • 701手表BQB PROFILE认证注意事项
  • 认证的干扰规避整改
  • 海外CRA认证报告生成说明
  • JL700N可视化工具问题处理文档
  • JL701X可视化工具问题处理文档
  • JL701N_earphone_release_v1.6.0_ANC 低功耗问题补丁
  • JL708X可视化工具问题处理文档
  • JL709N可视化工具问题处理文档
  • JLstudio可视化工具使用说明
  • 一拖二-串口_蓝牙_app在线EQ、通话参数及调试方式和内置触摸调试
  • 可视化JL701M_DONGLE_SDK添加MIC为发射源
  • 可视化JL701M_DONGLE_SDK添加按键切换usb audio与MIC发射源
  • JL701M_DONGLE_SDK_1.0.0_dongle输入linein输出dac
  • 701可视化_a2dp_to_le_demo说明
  • 耳机系列demo汇总
  • JL7018F&JL7006F_7003F AUX IIS
  • 一键连接应用
  • 普通SDK动态开关一拖二功能
  • 蓝牙分析仪(EllisysBluetoothAnalyzer)抓包例程
  • TWS配对常见应用
  • APP自定义按键的demo
  • AC700N 播歌双EQ DEMO示例及说明
  • AC698V164 MIC与蓝牙音乐共同输出DAC demo
  • 添加第三方算法以及多算法授权流程
  • 空间音频配置方法
  • 普通高低电平TWS耳机控制通讯
  • 入耳检测状态更新demo解析
  • 资源优化(非可视化的SDK)
  • 资源优化(可视化SDK)
  • 翻译耳机、语音识别应用demo
  • 耳机抗干扰问题排查和优化
  • AC698D2 抗干扰优化
  • AC696X软件问题整理
  • AC695X软件问题整理
  • AC695X软件问题整理_1722249702
  • AC608X软件问题整理
  • JL701N_2T1_DUPLEX 应用软件问题汇总
  • le_audio_1.0.0_patch05 以及之前的版本IRkey 功能异常修改
  • AC706N-le_audio-200SDK有线_无线麦录音demo
  • jl701n_le_audio_v200patch02 IO串口升级修改串口单次发送字节长度的修改办法
  • 703创建IIS 输入dac输出音频流demo
  • 703将媒体流音频同时上传PC_mic录音demo实现
  • 703四路IIS输入输出demo
  • 底噪调试
  • AW328A烧录说明
  • 文档合集
  • AC706N_wireless_mic_release_PATCH_20240712 补丁 说明
  • AC706N_wireless_mic_release_PATCH_20240726 补丁 说明
  • AC706N_wireless_mic_release_V1.0.0、1.0.1、1.0.2 补丁 说明
  • AC706N_wireless_mic_release_V1.1.2 中的2T1应用 RX端不绑定配对,TX端实现绑定配对的修改方法
  • 各系列省晶振实现方法
  • iis tx rx说明文档
  • spdif信号
  • 蓝牙电话本
  • 安卓手机同步时间补丁
  • CDC配置
  • PC模式下增加Teams唤起功能
  • 杰理HDMIARC开发实现过程
  • AC701N patch06之前的版本用第三方算法节点实现新版本的pcm delay节点功能
  • (K歌音箱)各SDK音效配置相关说明
  • 长文件录音
  • 点阵屏歌词字库相关(蓝牙歌词,普通歌词)
  • 字模提取工具说明
  • 音箱可视化彩屏-入门到进阶开发指导
  • 彩屏LVGL UI设计及工具使用
  • 使用内部UI框架进行UI调试的系列步骤
  • AD101C使用强制升级工具spi 烧录不了问题处理(测试版本)
  • AD161扩展灯板说明文档
  • 歌词显示器开发注意项
  • 使用硬件数字增益控制通话下行音量(可视化)
  • 杰理小牛产测资料
  • ENC配置说明
  • 通话调试流程指引
  • ANC相关功能demo
  • 无线麦硬件资料汇总
  • 无线麦相关应用
  • 无线麦复杂功能补丁包汇总
  • 无线话筒形态SDK程序&开发经验&问题点分享
  • 双模式结合应用问题汇总
  • 无线麦距离优化案例
  • 无线麦系列中的双工形态(duplex)演变开发对讲机方案开发资料
  • 音箱入门到进阶指导文档(编写中)
  • 蓝牙耳机品控和生产技巧
  • 982过_欠压标志获取异常
  • 如何获取最新涂鸦SDK及库文件
  • 无线话筒K歌音响-调音标准流程
  • 无线话筒产测流程

一拖八RPC接口说明

📎 原始文档:https://www.kdocs.cn/l/cl8c33FZspuw

一拖八烧写器远程过程调用(RPC)接口使用说明

杰理科技
2022年01月10 日
目录
第 1章 介绍....................................................................................................................................... 3
第2章 RPC服务................................................................................................................................4
2.1 启动RPC服务........................................................................................................................... 4
2.2 停止RPC服务........................................................................................................................... 4
第3章 RPC接口............................................................................................................................... 5
3.1 枚举在线的烧写器................................................................................................................... 5
3.2 部署烧录文件到烧写器........................................................................................................... 6
3.3 复位烧写器............................................................................................................................... 7
3.4 发送命令到烧写器端口........................................................................................................... 8
3.4. 1.查询烧写器端口是否有设备.....................................................................................8
3.4.2.发送烧写命令到烧写器端口.....................................................................................9
3.4.3.查询烧写结果........................................................................................................... 10
3.4.4.查询烧写状态........................................................................................................... 12
3.4.5.复位烧写器端口上连接的设备............................................................................... 14
3.4.6.打开烧写器端口供电............................................................................................... 15
3.4.7.关闭烧写器端口供电............................................................................................... 16
第4章 烧写控制流程.....................................................................................................................18
第5章 对比烧写文件和烧写器中烧写文件校验码.................................................................... 19
5.1 获取烧写文件校验码............................................................................................................. 19
5.2 获取烧写器中烧写文件校验码............................................................................................. 19
第6章 Python示例代码................................................................................................................20
第7章 附录..................................................................................................................................... 30
7.1 命令列表1.............................................................................................................................. 30
7.2 命令列表2.............................................................................................................................. 30
7.3 错误号列表............................................................................................................................. 30
7.4 烧写选项................................................................................................................................. 31
7.4. 1.公共选项...................................................................................................................31
7.4.2. AC62N 烧写选项.......................................................................................................31
7.4.3. AC635N 烧写选项.....................................................................................................31
7.4.4. AC695X烧写选项..................................................................................................... 32

第1章 介绍

为支持工厂更好的管控生产过程,此版本烧写器以 HTTP服务方式提供RPC接口,用于支持和第三方管理软件对接。

第2章 RPC服务

烧写器以HTTP服务方式提供RPC接口。本地默认URL地址为“http://127.0.0.1:17117/1TO8”。

2.1 启动RPC服务

需要启动一拖八烧写器RPC服务,以守护进程方式启动烧写器盘符中的burner.exe 即可。以批处理命令方式启动RPC服务,请执行烧写器CDROM设备中的start_daemon. bat。
start_daemon. bat文件内容如下:
image burner.exe--daemon--port 17117
只需要启动一个守护进程就可以支持控制多个烧写器。可以通过参数--port指定RPC服务的端口。

2.2 停止RPC服务

需要停止一拖八烧写器RPC服务时,中止burner.exe 即可。以批处理命令方式结束RPC服务,请执行烧写器CDROM设备中的stop_daemon. bat。
stop_daemon. bat文件内容如下:
image taskkill /f /im burner.exe
更新烧写器固件,请务必关闭上一个版本的RPC服务进程。

第3章 RPC接口

所有RPC请求都以 POST方式发送JSON格式命令到烧写器的 HTTP服务。更多详细信息请阅读Python示例代码章节。

3.1 枚举在线的烧写器

参数说明:

请求参数参数类型说明
COMMANDString固定值“LIST”

返回说明:

返回参数参数类型说明
COMMNADString固定值“LIST”
RESULTString成功返回 “SUCCESS”,错误返回其他值
DEVICESArray返回所有在线的烧写器
ERROR_CODEInt错误号,详细信息请查看错误号列表
ERROR_MESSAGEString错误信息描述
RESULTBool命令是否执行成功

烧写器信息:

参数参数类型说明
NAMEString烧写器名字
VERSIONString烧写器版本,如“UHD2-1T08-0895”
BURN_INFOString烧写器当前烧写文件信息和烧写选项信息

请求示例:

{​
"COMMAND" :"LIST"​}

返回示例:

{​
"COMMAND" : "LIST",
"DEVICES" : [
{​
"BURN_INFO" : "","NAME" : "UHD2-1T08-0895","VERSION" : "4.1.1 "
​},
{​
"BURN_INFO" : "","NAME" : "UHD2-1T08-0896","VERSION" : "4.1.1,
​}
],
"ERROR_CODE" :0,
"ERROR_MESSAGE" :"SUCCESS","RESULT" :true
​}

3.2 部署烧录文件到烧写器

部署文件为同步操作, RPC返回需要一定时间,具体时间跟烧写文件大小有关。

参数说明:

请求参数参数类型说明
COMMANDString固定值“DEPLOY”
BURNERString枚举烧写器接口返回的 NAME,如“UHD2-1T08-0895”
CHIPString烧录的芯片型号,如“AC695X”
FILEString烧录文件的文件名,如 “MY_AC695X[已授权] .fw”
DATAStringBase64格式的烧录文件内容
OPTIONSObject烧写选项,如
{​
"ERASE_FLASH":True,
"LVD":"2.3v"
​}
详细选项查看附录章节的烧写选项

返回说明:

返回参数参数类型说明
COMMNADString固定值“DEPLOY”
ERROR_CODEInt错误号,详细信息请查看错误号列表
ERROR_MESSAGEString错误信息描述
RESULTBool命令是否执行成功

请求示例:

{​
"BURNER" :"UHD2-1T08-0895","CHIP" :"AC632N",
"COMMAND" :"DEPLOY","DATA" :"<Base64烧写文件数据>","FILE" :"AC632N_ [已授权].fw",
"OPTIONS" : {​"CHECK_TRIM" :true,"ERASE_FLASH" :true,"LNA_BIAS" :true,"LRC_TRIM" :false,"LVD" :"2.60v",
"OPERATION_TIME" : 1000,"USB_PORT_CURRENT" : 100,"USB_PORT_VOLTAGE" :"4.8 "
​}
​}

返回示例:

{​
"BURNER" :"UHD2-1T08-0895","CHIP" :"AC632N",
"COMMAND" :"DEPLOY","DATA" :"<Base64烧写文件数据>","ERROR_CODE" :0,"ERROR_MESSAGE" :"SUCCESS","FILE" :"AC632N_ [[已授权]].fw",
"OPTIONS" : {​"CHECK_TRIM" :true,"ERASE_FLASH" :true,"LNA_BIAS" :true,"LRC_TRIM" :false,"LVD" :"2.60v",
"OPERATION_TIME" : 1000,"USB_PORT_CURRENT" : 100,"USB_PORT_VOLTAGE" :"4.8 "
​},
"RESULT" :true​}

3.3 复位烧写器

复位烧写器命令用于部署烧写文件后,使烧写文件生效。复位烧写器后,需要使用枚举命令查询烧写文件是否生效。

参数说明:

请求参数参数类型说明
COMMANDString固定值“REBOOT”
BURNERString枚举烧写器接口返回的 NAME,如“UHD2-1T08-0895”

返回说明:

返回参数参数类型说明
COMMNADString固定值“REBOOT”
ERROR_CODEInt错误号,详细信息请查看错误号列表
ERROR_MESSAGEString错误信息描述
RESULTBool命令是否执行成功

请求示例:

{​
"BURNER" :"UHD2-1T08-0895","COMMAND" :"REBOOT"
​}

返回示例:

{​
"BURNER" :"UHD2-1T08-0895","COMMAND" :"REBOOT","ERROR_CODE" :0,"ERROR_MESSAGE" :"SUCCESS","RESULT" :true
​}

3.4 发送命令到烧写器端口

通过发送命令到烧写器端口,可以控制每个烧写器端口的具体操作。控制每个烧写器端口的操作通过RPC命令的BURNER参数和PORT参数控制。具体信息请看本章以下部分。

3.4.1.查询烧写器端口是否有设备

此命令用于对指定的烧写器端口重新上电,检测是否有设备接入。
参数说明:

请求参数参数类型说明
COMMANDString固定值“DEVICE_QUERY”
BURNERString枚举烧写器接口返回的 NAME,如“UHD2-1T08-0895”
PORTInt烧写器端口编号,范围0~7

返回说明:

返回参数参数类型说明
COMMNADString固定值“DEVICE_QUERY”
BURNERString请求参数中的 BURNER值
PORTInt请求参数中的端口编号
DEVICE_STATUSString设备进入烧写状态,返回“ONLINE”,其他情况返回“OFFLINE”
ERROR_CODEInt错误号,详细信息请查看错误号列表
ERROR_MESSAGEString错误信息描述
RESULTBool命令是否执行成功

请求示例:

{​
"BURNER" :"UHD2-1T08-0895","COMMAND" :"DEVICE_QUERY","PORT" :7
​}

返回示例:

{​
"BURNER" :"UHD2-1T08-0895","COMMAND" :"DEVICE_QUERY","DEVICE_STATUS" :"ONLINE","ERROR_CODE" :0,"ERROR_MESSAGE" :"SUCCESS","PORT" :7,
"RESULT" :true​}

3.4.2.发送烧写命令到烧写器端口

此命令用于启动指定烧写器端口的烧写程序,对芯片进行烧写。
参数说明:

请求参数参数类型说明
COMMANDString固定值“BURN”
BURNERString枚举烧写器接口返回的 NAME,如“UHD2-1T08-0895”
PORTInt烧写器端口编号,范围0~7
ASYNCBool是否异步, 为true 时,命令直接返回成功,需要通过QUERY_COMMAND_RESULT查询实际烧写结果。
为false时,命令会等待烧写结果再返回。
TIMEOUTInt命令等待超时时间。 当命令为同步模式时有效(即“ASYNC”=false),默认值为10000毫秒。
MACString可选参数,烧写固件的同时是否烧写蓝牙地址。蓝牙地址格式为HEX字符串。长度固定为12。例如:"MAC":"010203040506"
AUTH_CODEString可选参数,烧写固件的同时烧写认证码等第三方数据。 比如三元组,序列号……
认证码格式为HEX字符串。最长为250。
例如:"AUTH_CODE":"ABCDEF0123456789"

返回说明:

返回参数参数类型说明
COMMNADString固定值“DEVICE_QUERY”
BURNERString请求参数中的 BURNER值
PORTInt请求参数中的端口编号
ERROR_CODEInt错误号,详细信息请查看错误号列表
ERROR_MESSAGEString错误信息描述
RESULTBool命令是否执行成功

请求示例:

{​
"ASYNC" :true,"BURNER" :"UHD2-1T08-0895","COMMAND" :"BURN",
"PORT" :7​}

返回示例:

{​
"ASYNC" :true,"BURNER" :"UHD2-1T08-0895","COMMAND" :"BURN",
"ERROR_CODE" :0,"ERROR_MESSAGE" :"SUCCESS","PORT" :7,
"RESULT" :true​}

3.4.3.查询烧写结果

此命令用于查询指定烧写器端口的烧写结果。可以反复查询多次。

参数说明:

请求参数参数类型说明
COMMANDString固定值“QUERY_COMMAND_RESULT”
BURNERString枚举烧写器接口返回的 NAME,如“UHD2-1T08-0895”
PORTInt烧写器端口编号,范围0~7

返回说明:

返回参数参数类型说明
COMMNADString固定值“QUERY_COMMAND_RESULT”
BURNERString请求参数中的 BURNER值
PORTInt请求参数中的端口编号
COMMAND_RESULTObject如果烧写正在进行中,则返回一个空的JSON Object。如果烧写结果,则返回实际烧写结果。
烧写结果信息如下表。
ERROR_CODEInt错误号,详细信息请查看错误号列表
ERROR_MESSAGEString错误信息描述
RESULTBool命令是否执行成功

烧写结果信息:

参数参数类型说明
EXPEND_TIMEInt烧写使用时间
RESULTString成功返回 “SUCCESS”,错误返回其他值
BURN_FILE_CRC16Int烧写固件的 16bit校验码
BURN_FILE_CRC32Int烧写固件的32bit校验码
CRCString烧写固件的校验码
其他值同返回参数

请求示例:

{​
"BURNER" :"UHD2-1T08-0895","COMMAND" :"QUERY_COMMAND_RESULT","PORT" :7
​}

返回示例:

{​
"BURNER" :"UHD2-1T08-0895","COMMAND" :"QUERY_COMMAND_RESULT","COMMAND_RESULT" : {​
"ASYNC" :true,"BURNER" :"UHD2-1T08-0895","BURN_FILE_CRC16" :55146,"BURN_FILE_CRC32" :-704842446,"COMMAND" :"BURN","CRC" :"D76A-D5FCF532","ERROR_CODE" :0,"ERROR_MESSAGE" :"SUCCESS","EXPEND_TIME" : 1809,
"PORT" :7
"RESULT" :false ​},"ERROR_CODE" :0,
"ERROR_MESSAGE" :"SUCCESS","PORT" :7,
"RESULT" :true​}

3.4.4.查询烧写状态

此命令用于返回烧写器各个端口当前的烧写状态信息。

参数说明:

请求参数参数类型说明
COMMANDString固定值“QUERY_BURN_STATUS”
BURNERString枚举烧写器接口返回的 NAME,如“UHD2-1T08-0895”

返回说明:

返回参数参数类型说明
COMMNADString固定值“QUERY_BURN_STATUS”
BURNERString请求参数中的 BURNER值
STATUSArray每个烧写端口的烧写状态。烧写状态信息如下表。
ERROR_CODEInt错误号,详细信息请查看错误号列表
ERROR_MESSAGEString错误信息描述
RESULTBool命令是否执行成功

烧写状态信息:

参数参数类型说明
MESSAGEString烧写状态文字
PORTInt烧写器烧写端口号,范围:0~7
PROGRESSInt烧写器端口烧写进度,范围0~ 100

请求示例:

{​
"BURNER" :"UHD2-1T08-0895",
"COMMAND" :"QUERY_BURN_STATUS"​}

返回示例:

{​
"BURNER" :"UHD2-1T08-0895","COMMAND" :"QUERY_BURN_STATUS","ERROR_CODE" :0,"ERROR_MESSAGE" :"SUCCESS","RESULT" :true,
"STATUS" : [
{​
"MESSAGE" :"等待设备 ","PORT" :0,
"PROGRESS" :0
​},
{​
"MESSAGE" :"等待设备 ","PORT" : 1,
"PROGRESS" :0
​},
{​
"MESSAGE" :"等待设备 ","PORT" :2,
"PROGRESS" :0
​},
{​
"MESSAGE" :"等待设备 ","PORT" :3,
"PROGRESS" :0
​},
{​
"MESSAGE" :"等待设备 ","PORT" :4,
"PROGRESS" :0
​},
{​
"MESSAGE" :"等待设备 ","PORT" :5,
"PROGRESS" :0
​},
{​
image

3.4.5.复位烧写器端口上连接的设备

此命令后用于复位烧写器端口上的设备。调用此命令后会关闭 USB DP/ DM 口(高阻状态),仅对烧写器端口上的设备进行供电。仅对已经进入烧写模式的设备有效。

参数说明:

请求参数参数类型说明
COMMANDString固定值“DEVICE_RESET”
BURNERString枚举烧写器接口返回的 NAME,如“UHD2-1T08-0895”
PORTInt烧写器端口编号,范围0~7

返回说明:

返回参数参数类型说明
COMMNADString固定值“DEVICE_RESET”
BURNERString请求参数中的 BURNER值
PORTInt请求参数中的端口编号
ERROR_CODEInt错误号,详细信息请查看错误号列表
ERROR_MESSAGEString错误信息描述
RESULTBool命令是否执行成功

请求示例:

{​
"BURNER" :"UHD2-1T08-0895","COMMAND" :"DEVICE_RESET","PORT" :7
​}

返回示例:

{​
"BURNER" :"UHD2-1T08-0895","COMMAND" :"DEVICE_RESET","ERROR_CODE" :0,"ERROR_MESSAGE" :"SUCCESS","PORT" :7,
"RESULT" :true​}

3.4.6.打开烧写器端口供电

此命令用于打开烧写指定端口的供电。此命令不会使设备进入烧写模式,仅对烧写器端口上的设备进行供电。

参数说明:

请求参数参数类型说明
COMMANDString固定值“POWER_ON”
BURNERString枚举烧写器接口返回的 NAME,如“UHD2-1T08-0895”
PORTInt烧写器端口编号,范围0~7

返回说明:

返回参数参数类型说明
COMMNADString固定值“POWER_ON”
BURNERString请求参数中的 BURNER值
PORTInt请求参数中的端口编号
ERROR_CODEInt错误号,详细信息请查看错误号列表
ERROR_MESSAGEString错误信息描述
RESULTBool命令是否执行成功

请求示例:

{​
"BURNER" :"UHD2-1T08-0895","COMMAND" :"POWER_ON","PORT" :7
​}

返回示例:

{​
"BURNER" :"UHD2-1T08-0895","COMMAND" :"POWER_ON","ERROR_CODE" :0,"ERROR_MESSAGE" :"SUCCESS","PORT" :7,
"RESULT" :true​}

3.4.7.关闭烧写器端口供电

此命令用于关闭烧写指定端口的供电。

参数说明:

请求参数参数类型说明
COMMANDString固定值“POWER_OFF”
BURNERString枚举烧写器接口返回的 NAME,如“UHD2-1T08-0895”
PORTInt烧写器端口编号,范围0~7

返回说明:

返回参数参数类型说明
COMMNADString固定值“POWER_OFF”
BURNERString请求参数中的 BURNER值
PORTInt请求参数中的端口编号
ERROR_CODEInt错误号,详细信息请查看错误号列表
ERROR_MESSAGEString错误信息描述
RESULTBool命令是否执行成功

请求示例:

{​
"BURNER" :"UHD2-1T08-0895","COMMAND" :"POWER_OFF","PORT" :7
​}

返回示例:

{​
"BURNER" :"UHD2-1T08-0895","COMMAND" :"POWER_OFF","ERROR_CODE" :0,"ERROR_MESSAGE" :"SUCCESS",

"PORT" :7,

"RESULT" :true​}

第4章 烧写控制流程

a. 所有烧写器升级到支持RPC模式的版本后,连接到电脑上。
b. 通过烧写器盘符中的 burner.exe启动烧写器RPC服务。 多台烧写器仅需启动一个RPC 服务。启动RPC服务方法请查看启动RPC服务章节。
c. 获取所有连接到电脑的烧写器。命令格式请查看枚举在线的烧写器章节。
d. 部署烧写文件、设置烧写选项到所有烧写器。命令格式请查看部署烧录文件到烧写器章节。
e. 复位所有烧写器。命令格式请查看复位烧写器章节。
f. 循环查看所有烧写器的所有端口是否有设备已连接成功。命令格式请查看查询烧写器端口是否有设备章节。
g. 发现某烧写器某端口有设备已经连接成功后,发送烧写命令到某烧写器的某端口。命令格式请查看发送烧写命令到烧写器端口章节。
h. 如需要查询烧写进度。命令格式请查看查询烧写状态章节。
i. 获取某烧写器的某端口的烧写结果。命令格式请查看查询烧写结果章节。
j. 如烧写成功后需要复位烧写设备,进行其他操作。可以发送复位命令到烧写器端口。命令格式请查看复位烧写器端口上连接的设备章节。

第5章 对比烧写文件和烧写器中烧写文件校验码

为避免重复部署烧写文件,可以通过获取烧写文件校验码和烧写器中烧写文件校验码来进行对比,判读是否需要部署烧写文件。

5.1 获取烧写文件校验码

通过 “校验码命令行查看工具_2.1.7.exe”工具可以查看烧写文件校验码。命令参数和校验码信息如下图所示。
image

5.2 获取烧写器中烧写文件校验码

如烧写器中部署了烧写文件。枚举在线的烧写器的时候,RPC命令会返回烧写器中的烧写文件信息。如下图所示。
image

第6章 Python示例代码

image #!/usr/bin/python3
#
# 此脚本仅用于演示一拖八RPC接口调用#
import
import
import
import
import
import
sys
json requests base64
time os
# http
url = "http://127.0.0.1:17117/1TO8"
headers = {​'Content-Type' : 'application/json' ​}
# 在线的烧写器 g_online1_to8_devies = []
#枚举所有烧写器 def list ( show=True ) :
print ( "正在枚举烧写器") ;
command = {​​}
command ["COMMAND"] = "LIST"
try :
[r = requests.post](r = requests.post) (url, data=json.dumps(command), headers=headers)
except Exception :
print ( "网络错误")
return False
if 200 != r.status_code :
print ( "枚举烧写器失败")
print (r.status_code)
return False
reply_text = r.text ;
reply = json.loads (reply_text)
print ( "发送")
print (json.dumps (command, sort_keys=True, indent=4, separators=(',', ' 😂)) print ( "接收")
image print (json.dumps (reply, sort_keys=True, indent=4, separators=(',', ' 😂))
if 0 != reply [ "ERROR_CODE"] :
print ( "枚举烧写器失败")
print (reply ["ERROR_MESSAGE"])
return False
if True == show :
print (reply)
global g_online1_to8_devies
g_online1_to8_devies = reply [ "DEVICES"]
count = len (g_online1_to8_devies)
if 0 == count :
if True == show :
print ( "没有发现烧写器")
return False if True == show :
print ( "在线烧写器个数: {​0​}".format(count))
for device in g_online1_to8_devies :
print ( "************ 烧 写 器 : {​name​} 版 本 ={​ver ​}
".format (name=device [ "NAME"],ver=device ["VERSION"]))
print (device [ "BURN_INFO"].strip ())
print ( "
***************************************")
return True
#部署烧写文件到烧写器, 此命令暂时是同步的 def deploy (chip, file, burner) :
try :
fhandle = open (file, "rb")
[data = fhandle.read](data = fhandle.read) ()
fhandle.close ()
except Exception :
print ( "文件不存在或者读取文件失败: 文件={​0​}".format(file))
return False
# 获取烧写文件校验码
res_lines = os.popen ( " 校 验 码 命 令 行 查 看 工 具 _2.1.7.exe {​file​}".format (file=file)).readlines ()
file_crc = ""
for line in res_lines :
line = line.strip ()
if 0 == line.find ( "Firmware Checksum 😊 :
file_crc = line [-13 :].lower ()
break
image if 0 == line.find ( "固件校验码:") :
file_crc = line [-13 :].lower ()
break
# 获取烧写器当前烧写文件校验码 burn_file_crc = ""
burn_infos = burner [ "BURN_INFO"].splitlines () ;
for info in burn_infos :
info = info.strip ()
if 0 == info.find ( "CRC:") :
burn_file_crc = info [-13 :].lower ()
break
print ( "要部署的烧写文件校验码 : {​0​}".format(file_crc))
print ( "烧写器中的烧写文件校验码: {​0​}".format(burn_file_crc))
# 比较校验码是否一致
if burn_file_crc == file_crc :
print ( "烧写文件一致,不需要重新部署")
return True
base64_data = base64.b64encode (data)
# 组装命令 command = {​​}
command ["COMMAND"] = "DEPLOY"
command ["BURNER"] = burner [ "NAME"]
command ["CHIP"] = chip
command ["FILE"] = file
command ["DATA"] = str (base64_data,"utf-8")
#烧写选项
options = json.loads (' {​​}')
#options [ "BATTERY_SUPPLY"] = False options ["CHECK_TRIM"] = True options ["ERASE_FLASH"] = True options ["LNA_BIAS"] = True
#options [ "LONG_RESET_EN"] = False options ["LRC_TRIM"] = False
#options [ "LVD"] = "Disable"options ["LVD"] = "2.60v"options ["OPERATION_TIME"] = 1000
#options [ "SFC_CHECK"] = "Soundbox"
#options [ "SHORT_RESET_EN"] = False
#options [ "USB_ISP"] = True options ["USB_PORT_CURRENT"] = 100
image options ["USB_PORT_VOLTAGE"] = "4.8"
command ["OPTIONS"] = options
try :
[r = requests.post](r = requests.post) (url, data=json.dumps(command), headers=headers)
except Exception :
print ( "网络错误")
return False reply_text = r.text ;
reply = json.loads (reply_text)
command ["DATA"] = "<Base64烧写文件数据>"
reply [ "DATA"] = "<Base64烧写文件数据>"
print ( "发送")
print (json.dumps (command, sort_keys=True, indent=4, separators=(',', ' 😂))
print ( "接收")
print (json.dumps (reply, sort_keys=True, indent=4, separators=(',', ' 😂))
if 0 != reply [ "ERROR_CODE"] :
print ( " 部 署 烧 写 文 件 失 败 , 文 件 ={​file​}, 错 误
={​error ​}".format (file=file, error=reply [ "RESULT"]))
return False print ( "部署烧写文件成功,文件={​0​}".format(file)) return True

# 发送命令到烧写器

def command ( burner, command_text ) :
command = {​​}
command ["COMMAND"] = command_text
command ["BURNER"] = burner
try :
[r = requests.post](r = requests.post) (url, data=json.dumps(command), headers=headers)
except Exception :
print ( "网络错误")
return False reply_text = r.text ;
reply = json.loads (reply_text)
print ( "发送")
print (json.dumps (command, sort_keys=True, indent=4, separators=(',', ' 😂))
print ( "接收")
print (json.dumps (reply, sort_keys=True, indent=4, separators=(',', ' 😂))
image if 0 != reply [ "ERROR_CODE"] :
return False return True
# 发送命令到烧写器端口
def command_to_port ( burner, port, command_text ) :
command = {​​}
command ["COMMAND"] = command_text
command ["BURNER"] = burner
command ["PORT"] = port
try :
[r = requests.post](r = requests.post) (url, data=json.dumps(command), headers=headers)
except Exception :
print ( "网络错误")
return False reply_text = r.text ;
reply = json.loads (reply_text)
print ( "发送")
print (json.dumps (command, sort_keys=True, indent=4, separators=(',', ' 😂))
print ( "接收")
print (json.dumps (reply, sort_keys=True, indent=4, separators=(',', ' 😂))
if 0 != reply [ "ERROR_CODE"] :
return False return True
# 复位烧写器, 复位后如发现有ADC错误,请手动给烧写器重新上电 def reboot ( burner ) :
command = {​​}
command ["COMMAND"] = "REBOOT"
command ["BURNER"] = burner
try :
[r = requests.post](r = requests.post) (url, data=json.dumps(command), headers=headers)
except Exception :
print ( "网络错误")
return False reply_text = r.text ;
reply = json.loads (reply_text)
print ( "发送")
print (json.dumps (command, sort_keys=True, indent=4, separators=(',', ' 😂))
print ( "接收")
print (json.dumps (reply, sort_keys=True, indent=4, separators=(',', ' 😂))
image if 0 != reply [ "ERROR_CODE"] :
print ( "复位烧写器失败, 烧写器={​0​},错误信息={​1​}".format(burner, reply [ "RESULT"]))
return False print ( "复位烧写器成功,烧写器={​0​}".format(burner))
time.sleep (5)
return True
# 查询烧写器端口是否有设备
def device_query (burner, port) :
command = {​​}
command ["BURNER"] = burner
command ["PORT"] = port
command ["COMMAND"] = "DEVICE_QUERY"
try :
[r = requests.post](r = requests.post) (url, data=json.dumps(command), headers=headers)
except Exception :
print ( "网络错误")
return False reply_text = r.text ;
reply = json.loads (reply_text)
print ( "发送")
print (json.dumps (command, sort_keys=True, indent=4, separators=(',', ' 😂))
print ( "接收")
print (json.dumps (reply, sort_keys=True, indent=4, separators=(',', ' 😂))
if 0 != reply [ "ERROR_CODE"] :
return False
if "ONLINE" != reply [ "DEVICE_STATUS"] :
return False return True

# 复位设备

def device_reset (burner, port) :
command = {​​}
command ["BURNER"] = burner
command ["PORT"] = port
command ["COMMAND"] = "DEVICE_RESET"
try :
[r = requests.post](r = requests.post) (url, data=json.dumps(command), headers=headers)
except Exception :
print ( "网络错误")
image return False reply_text = r.text ;
reply = json.loads (reply_text)
print ( "发送")
print (json.dumps (command, sort_keys=True, indent=4, separators=(',', ' 😂))
print ( "接收")
print (json.dumps (reply, sort_keys=True, indent=4, separators=(',', ' 😂))
if 0 != reply [ "ERROR_CODE"] :
return False return True

# 发送烧写命令

def burn (burner, port, ASYNC=True) : # ASYNC=True 是否异步
command = {​​}
command ["BURNER"] = burner
command ["PORT"] = port
command ["COMMAND"] = "BURN"
command ["ASYNC"] = ASYNC
command ["MAC"] = "010203040506"
command ["AUTH_CODE"] = "ABCDEF0123456789"
try :
[r = requests.post](r = requests.post) (url, data=json.dumps(command), headers=headers)
except Exception :
print ( "网络错误")
return False reply_text = r.text ;
reply = json.loads (reply_text)
print ( "发送")
print (json.dumps (command, sort_keys=True, indent=4, separators=(',', ' 😂))
print ( "接收")
print (json.dumps (reply, sort_keys=True, indent=4, separators=(',', ' 😂))
if 0 != reply [ "ERROR_CODE"] :
return False return True

# 查询进度信息

def query_burn_status (burner) :
command = {​​}
command ["BURNER"] = burner
command ["COMMAND"] = "QUERY_BURN_STATUS"
image try :
[r = requests.post](r = requests.post) (url, data=json.dumps(command), headers=headers)
except Exception :
print ( "网络错误")
return False reply_text = r.text ;
reply = json.loads (reply_text)
print ( "发送")
print (json.dumps (command, sort_keys=True, indent=4, separators=(',', ' 😂))
print ( "接收")
print (json.dumps (reply, sort_keys=True, indent=4, separators=(',', ' 😂))
if 0 != reply [ "ERROR_CODE"] :
return False return True

# 查询指定端口烧写结果

def query_burn_result (burner,port) :
command = {​​}
command ["BURNER"] = burner
command ["PORT"] = port
command ["COMMAND"] = "QUERY_COMMAND_RESULT"
try :
[r = requests.post](r = requests.post) (url, data=json.dumps(command), headers=headers)
except Exception :
print ( "网络错误")
return False reply_text = r.text ;
reply = json.loads (reply_text)
print ( "发送")
print (json.dumps (command, sort_keys=True, indent=4, separators=(',', ' 😂))
print ( "接收")
print (json.dumps (reply, sort_keys=True, indent=4, separators=(',', ' 😂))
if 0 != reply [ "ERROR_CODE"] :
return False
if reply [ "COMMAND_RESULT"] == json.loads (' {​​}') :
return False return True
def port_offline_check ( burner, port ) :
command = {​​}
image command ["COMMAND"] = "DEVICE_CHECK"
command ["BURNER"] = burner
command ["PORT"] = port
try :
[r = requests.post](r = requests.post) (url, data=json.dumps(command), headers=headers)
except Exception :
print ( "网络错误")
return False reply_text = r.text ;
reply = json.loads (reply_text)
print ( "发送")
print (json.dumps (command, sort_keys=True, indent=4, separators=(',', ' 😂))
print ( "接收")
print (json.dumps (reply, sort_keys=True, indent=4, separators=(',', ' 😂))
if "DEVICE OFFLINE" != reply [ "RESULT"] :
return False return True
def device_remove ( burner, port ) :
command = {​​}
command ["COMMAND"] = "DEVICE_REMOVE"
command ["BURNER"] = burner
command ["PORT"] = port
try :
[r = requests.post](r = requests.post) (url, data=json.dumps(command), headers=headers)
except Exception :
print ( "网络错误")
return False reply_text = r.text ;
reply = json.loads (reply_text)
print ( "发送")
print (json.dumps (command, sort_keys=True, indent=4, separators=(',', ' 😂))
print ( "接收")
print (json.dumps (reply, sort_keys=True, indent=4, separators=(',', ' 😂))
if "DEVICE OFFLINE" != reply [ "RESULT"] :
return False return True
def device_power_on ( burner, port ) :
command = {​​}
image command ["COMMAND"] = "POWER_ON"
command ["BURNER"] = burner
command ["PORT"] = port
print (command)
try :
[r = requests.post](r = requests.post) (url, data=json.dumps(command), headers=headers)
except Exception :
print ( "网络错误")
return False reply_text = r.text ;
reply = json.loads (reply_text)
print ( "发送")
print (json.dumps (command, sort_keys=True, indent=4, separators=(',', ' 😂))
print ( "接收")
print (json.dumps (reply, sort_keys=True, indent=4, separators=(',', ' 😂))
if "DEVICE OFFLINE" != reply [ "RESULT"] :
return False return True
def device_power_off ( burner, port ) :
command = {​​}
command ["COMMAND"] = "POWER_OFF"
command ["BURNER"] = burner
command ["PORT"] = port
print (command)
try :
[r = requests.post](r = requests.post) (url, data=json.dumps(command), headers=headers)
except Exception :
print ( "网络错误")
return False reply_text = r.text ;
reply = json.loads (reply_text)
print ( "发送")
print (json.dumps (command, sort_keys=True, indent=4, separators=(',', ' 😂))
print ( "接收")
print (json.dumps (reply, sort_keys=True, indent=4, separators=(',', ' 😂))
if "DEVICE OFFLINE" != reply [ "RESULT"] :
return False return True

第7章 附录

7.1 命令列表1

此命令列表命令为烧写器支持的命令

命令说明
LIST枚举烧写器
DEPLOY部署烧写文件到烧写器
REBOOT复位烧写器

7.2 命令列表2

此命令列表命令为烧写器端口支持的命令

命令说明
BURN发送
DEVICE_QUERY查询端口是否有设备在线
DEVICE_RESET复位端口上的设备
QUERY_BURN_STATUS发送异步烧写命令后,通过此命令查询烧写进度
QUERY_COMMAND_RESULT发送异步烧写命令后,通过此命令查询烧写结果

7.3 错误号列表

错误号说明
0成功,没有错误
1烧写器不在线
2命令超时
3无效的命令
4无效的参数
5无效的烧写文件数据
6无效的文件类型
7不支持的芯片型号
8部署烧写文件失败
9烧写器模式错误,烧写器拨码开关不正确
10启动烧写设备失败, USB链接不稳定或者芯片有问题
11烧写设备离线,无法执行指定命令
12烧写设备失败

7.4 烧写选项

7.4.1.公共选项

选项参数类型默认值范围对应GUI烧写选项
OPERATION_TIMEInt10000 ~ 10000换板时间(毫秒)
USB_PORT_CURRENTInt1000 ~ 300端口电流允许上限(毫安)
USB_PORT_VOLTAGEString"4.8""3.2 " ~ "6.7 " (最小间隔"0.1 ")USB端口电压(V)

7.4.2. AC62N烧写选项

选项参数类型默认值范围对应GUI烧写选项
ERASE_FLASHBooltruetrue,false烧写前擦除整个FLASH
CHECK_TRIMBooltruetrue,false校准查询
LRC_TRIMBoolfalsetrue,false免晶振方案
LNA_BIASBooltruetrue,falseLNA_BIAS
SHORT_RESET_ENBooltruetrue,false使能PB2短按复位功能
LONG_RESET_ENBooltruetrue,false使能PA9长按复位功能
LVDString" 1.55v"" 1.55v",
" 1.70v",
" 1.85v",
"2.00v",
"2. 15v",
"2.30v",
"2.45v",
"2.60v",
"Disable"
LVD 电压

7.4.3. AC635N烧写选项

选项参数类型默认值范围对应GUI烧写选项
ERASE_FLASHBooltruetrue, false烧写前擦除整个FLASH
CHECK_TRIMBooltruetrue, false校准查询
LRC_TRIMBoolfalsetrue, false免晶振方案
USB_ISPBooltruetrue, falseUSB/ ISP
IQ_TRIMBooltruetrue, falseIQ_TRIM
LVDString"2.3v"" 1.9v", "2.0v",
"2. 1v", "2. 2v",
"2.3v", "2.4v",
LVD 电压
"2.5v", "2.6v"
SFC_CHECKString"Soundbox"“Other,”“Soundbox”SFC校验(其他方案,音箱方案)

7.4.4. AC695X烧写选项

选项参数类型默认值范围对应GUI烧写选项
ERASE_FLASHBooltruetrue, false烧写前擦除整个FLASH
CHECK_TRIMBooltruetrue, false校准查询
LRC_TRIMBoolfalsetrue, false免晶振方案
USB_ISPBooltruetrue, falseUSB/ ISP
IQ_TRIMBooltruetrue, falseIQ_TRIM
BATTERY_SUPPLYBoolfalsetrue, false设备带电池
LVDString"2. 6v"" 1.9v", "2.0v",
"2. 1v", "2. 2v",
"2.3v", "2.4v",
"2.5v", "2.6v"
LVD 电压
SFC_CHECKString"Soundbox"“Other,”“Soundbox”SFC校验(其他方案,音箱方案)