Skip to content

固件升级

模块作用:固件升级链路相关命令。调用入口为 client.upload

推荐链路:

ts
await client.upload.appToBoot();
await client.upload.validateHeadData({ data: headData });
await client.upload.backupApp({ data: backupData });
await client.upload.downloadInit();

for (let index = 0; index < chunks.length; index += 1) {
  await client.upload.writeFlash({
    address: baseAddress + index * chunkSize,
    data: chunks[index],
    firstWrite: index === 0,
  });
}

await client.upload.validateAfterUpgrade();
await client.upload.bootToApp();

通知设备从 App 模式切换到 Boot 模式

client.upload.appToBoot()

简要描述: 通知设备从 App 模式切换到 Boot 模式。


参数

此方法不需要参数。


返回值

  • 总体类型: Promise<Uint8Array>
  • 描述: 返回设备响应 payload。

使用示例

调用方式:

ts
const response = await client.upload.appToBoot();

调用示例:

ts
await client.upload.appToBoot();

通知设备从 Boot 模式切换回 App 模式

client.upload.bootToApp()

简要描述: 通知设备从 Boot 模式切换回 App 模式。


参数

此方法不需要参数。


返回值

  • 总体类型: Promise<Uint8Array>
  • 描述: 返回设备响应 payload。

使用示例

调用方式:

ts
const response = await client.upload.bootToApp();

调用示例:

ts
await client.upload.bootToApp();

校验升级头数据

client.upload.validateHeadData(param)

简要描述: 校验升级头数据。


参数

参数类型是否必需说明
param.dataUint8Array升级头数据。

返回值

  • 总体类型: Promise<boolean>
  • 描述: 设备返回成功码时为 true

使用示例

调用方式:

ts
const ok = await client.upload.validateHeadData({ data });

调用示例:

ts
const ok = await client.upload.validateHeadData({
  data: firmwareHead,
});

执行 App 备份命令

client.upload.backupApp(param)

简要描述: 执行 App 备份命令。


参数

参数类型是否必需说明
param.dataUint8Array备份命令携带的数据。

返回值

  • 总体类型: Promise<boolean>
  • 描述: 设备返回成功码时为 true

使用示例

调用方式:

ts
const ok = await client.upload.backupApp({ data });

调用示例:

ts
await client.upload.backupApp({
  data: backupPayload,
});

初始化固件下载/写入流程

client.upload.downloadInit()

简要描述: 初始化固件下载/写入流程。


参数

此方法不需要参数。


返回值

  • 总体类型: Promise<boolean>
  • 描述: 当前实现只要收到响应即返回 true

使用示例

调用方式:

ts
const ok = await client.upload.downloadInit();

调用示例:

ts
await client.upload.downloadInit();

写入 flash 数据块

client.upload.writeFlash(param)

简要描述: 写入 flash 数据块。


参数

参数类型是否必需说明
param.addressnumber写入地址,会按 32 位小端拆分。
param.dataUint8Array写入的数据块。
param.sizenumber类型中保留字段,当前实现按 data.length 计算写入长度。
param.firstWriteboolean是否为首包。首包会构造完整软件帧头,非首包返回续包数据。

返回值

  • 总体类型: Promise<boolean>
  • 描述: 设备返回成功码时为 true

使用示例

调用方式:

ts
const ok = await client.upload.writeFlash(param);

调用示例:

ts
await client.upload.writeFlash({
  address: 0x08000000,
  data: firmwareChunk,
  firstWrite: true,
});

升级完成后校验固件

client.upload.validateAfterUpgrade()

简要描述: 升级完成后校验固件。


参数

此方法不需要参数。


返回值

  • 总体类型: Promise<boolean>
  • 描述: 设备返回成功码时为 true

使用示例

调用方式:

ts
const ok = await client.upload.validateAfterUpgrade();

调用示例:

ts
const ok = await client.upload.validateAfterUpgrade();

写入板型 ID 数据。该方法发送后不等待响应

client.upload.setBoardId(data)

简要描述: 写入板型 ID 数据。该方法发送后不等待响应。


参数

参数类型是否必需说明
datanumber[]板型 ID 相关字节数据。

返回值

  • 总体类型: Promise<void>

使用示例

调用方式:

ts
await client.upload.setBoardId(data);

调用示例:

ts
await client.upload.setBoardId([0x01, 0x02, 0x03, 0x04]);