V1.00.23 + OTA tool fine-grained progress display
- firmware version bump V1.00.22 -> V1.00.23 (0x00010017), no code change; user-verified BLE OTA (APP1->APP2) and UART OTA both PASS - ble_ota_update.py: frame-level live progress bar on tty (bar/pct/bytes/ rate/per-frame ack RTT, ~10fps throttled), 5%-step lines when redirected; resend/resync notices no longer mix into the bar line; END summary now reports resent/resynced counters; BEGIN/END stage banners - docs: dev log 46, AGENTS.md sync
This commit is contained in:
parent
5dcbdbad65
commit
ead16ef671
@ -5,7 +5,7 @@
|
|||||||
本仓库是 **mothercup(母乳杯)** 产品的完整代码仓库,包含三大部分:
|
本仓库是 **mothercup(母乳杯)** 产品的完整代码仓库,包含三大部分:
|
||||||
|
|
||||||
1. **设备固件** — 基于国民技术(Nations)**N32WB031 BLE SoC**(Cortex-M0,64MHz HSI,**板载硅片实测 256KB Flash**(0x01000000~0x0103FFFF,开发日志 §37),RAM 48KB+16KB):
|
1. **设备固件** — 基于国民技术(Nations)**N32WB031 BLE SoC**(Cortex-M0,64MHz HSI,**板载硅片实测 256KB Flash**(0x01000000~0x0103FFFF,开发日志 §37),RAM 48KB+16KB):
|
||||||
- **`mcm-ddc-ble/`** — 唯一活跃的应用固件工程(APP,链接在 APP1 bank `0x01008000`/112KB)。以 SDK rdtss 例程为蓝本,集成 FreeRTOS、UART CLI、BLE 自定义 GATT 服务(CLI 透传 / 设备信息查询 / BLE OTA 双 bank 直写升级)、bootsetting 与 APP_DATA 参数区结构化读写命令。当前版本 **V1.00.22**(`mcm-ddc-ble/inc/app_version.h`)。历史上曾有 `mcm-ddc-04/` 主工程,**已删除**,其功能已全部并入本工程。
|
- **`mcm-ddc-ble/`** — 唯一活跃的应用固件工程(APP,链接在 APP1 bank `0x01008000`/112KB)。以 SDK rdtss 例程为蓝本,集成 FreeRTOS、UART CLI、BLE 自定义 GATT 服务(CLI 透传 / 设备信息查询 / BLE OTA 双 bank 直写升级)、bootsetting 与 APP_DATA 参数区结构化读写命令。当前版本 **V1.00.23**(`mcm-ddc-ble/inc/app_version.h`)。历史上曾有 `mcm-ddc-04/` 主工程,**已删除**,其功能已全部并入本工程。
|
||||||
- **`Boot/`** — 自写精简 bootloader(链接在 `0x01000000`/16KB):校验 bootsetting 记录自身完整性(magic + 结构体 CRC32)后按 active bank 的 `start_address` 直接跳转;**不校验镜像 CRC(CRC 校验在 OTA 升级过程中完成)**;记录无效或地址越界回退 APP1。
|
- **`Boot/`** — 自写精简 bootloader(链接在 `0x01000000`/16KB):校验 bootsetting 记录自身完整性(magic + 结构体 CRC32)后按 active bank 的 `start_address` 直接跳转;**不校验镜像 CRC(CRC 校验在 OTA 升级过程中完成)**;记录无效或地址越界回退 APP1。
|
||||||
2. **手机 App `SmartAssiter/`** — uni-app **Vue3 + TypeScript** 工程(HBuilderX 项目管理,无 package.json),通过 BLE 连接设备:查看运行参数(温度/电压/转速等)、CLI 终端、OTA 升级页(当前停用,见下)。另有登录/注册/用户信息等云端业务页面。
|
2. **手机 App `SmartAssiter/`** — uni-app **Vue3 + TypeScript** 工程(HBuilderX 项目管理,无 package.json),通过 BLE 连接设备:查看运行参数(温度/电压/转速等)、CLI 终端、OTA 升级页(当前停用,见下)。另有登录/注册/用户信息等云端业务页面。
|
||||||
3. **PC 工具 `tools/`** — 整片烧录包制作/烧录脚本 + bleak 蓝牙测试客户端。
|
3. **PC 工具 `tools/`** — 整片烧录包制作/烧录脚本 + bleak 蓝牙测试客户端。
|
||||||
|
|||||||
@ -9,4 +9,4 @@ Program Size: Code=1320 RO-data=680 RW-data=0 ZI-data=2104
|
|||||||
FromELF: creating hex file...
|
FromELF: creating hex file...
|
||||||
After Build - User command #1: fromelf --bin --output=.\bin\caiic_boot.bin .\Objects\caiic_boot.axf
|
After Build - User command #1: fromelf --bin --output=.\bin\caiic_boot.bin .\Objects\caiic_boot.axf
|
||||||
".\Objects\caiic_boot.axf" - 0 Error(s), 0 Warning(s).
|
".\Objects\caiic_boot.axf" - 0 Error(s), 0 Warning(s).
|
||||||
Build Time Elapsed: 00:00:00
|
Build Time Elapsed: 00:00:01
|
||||||
|
|||||||
12
docs/开发日志.md
12
docs/开发日志.md
@ -1159,3 +1159,15 @@ APP2 链接的镜像发向 APP1 区。设备端 END 校验(向量表 Reset PC
|
|||||||
|
|
||||||
实测:修复后 UART OTA(APP2→APP1,V1.00.22)全程 PASS 并自动复核通过;
|
实测:修复后 UART OTA(APP2→APP1,V1.00.22)全程 PASS 并自动复核通过;
|
||||||
顺带修复了误刷进 APP1 区的内容。固件无改动(仅版本号 V1.00.21→V1.00.22)。
|
顺带修复了误刷进 APP1 区的内容。固件无改动(仅版本号 V1.00.21→V1.00.22)。
|
||||||
|
|
||||||
|
## 46. V1.00.23 + OTA 工具进度细化(2026-09-04,工具侧)
|
||||||
|
|
||||||
|
- 固件版本号 V1.00.22→V1.00.23(0x00010017,无代码改动),供用户做
|
||||||
|
BLE/UART OTA 全流程验证:两通道均 PASS(用户自测 BLE:APP1→APP2;
|
||||||
|
本机复测 BLE:APP2→APP1,自动复核版本/bank 正确)。
|
||||||
|
- `ble_ota_update.py` 进度显示细化:tty 下帧级进度条原地刷新(24 格
|
||||||
|
bar + 百分比 + 字节数 + 速率 + 最近一帧 ACK 往返 rtt,~10fps 节流);
|
||||||
|
非 tty(重定向/管道)自动退化为每 5% 一行,避免日志被 `\r` 刷乱。
|
||||||
|
重传/再同步提示前补换行不与进度条混行;END 总结新增
|
||||||
|
`N resent, N resynced` 统计(链路质量一目了然:BLE 实测 0 次,
|
||||||
|
接触不良的串口线 4~6 次)。BEGIN/END 阶段切换增加明示打印。
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@ -9,12 +9,12 @@
|
|||||||
#define __APP_VERSION_H__
|
#define __APP_VERSION_H__
|
||||||
|
|
||||||
#ifndef APP_FW_VERSION
|
#ifndef APP_FW_VERSION
|
||||||
#define APP_FW_VERSION "V1.00.22"
|
#define APP_FW_VERSION "V1.00.23"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Numeric form used by the BLE info query / OTA records: 0x00MMmmpp */
|
/* Numeric form used by the BLE info query / OTA records: 0x00MMmmpp */
|
||||||
#ifndef APP_FW_VERSION_NUM
|
#ifndef APP_FW_VERSION_NUM
|
||||||
#define APP_FW_VERSION_NUM 0x00010016u
|
#define APP_FW_VERSION_NUM 0x00010017u
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* __APP_VERSION_H__ */
|
#endif /* __APP_VERSION_H__ */
|
||||||
|
|||||||
@ -304,6 +304,9 @@ def decode_tlv(data):
|
|||||||
async def ota_session(xfer, chunk, blob, version, target):
|
async def ota_session(xfer, chunk, blob, version, target):
|
||||||
"""Lockstep OTA: BEGIN -> DATA* -> END, every frame acked by OTA_RSP."""
|
"""Lockstep OTA: BEGIN -> DATA* -> END, every frame acked by OTA_RSP."""
|
||||||
|
|
||||||
|
tty = sys.stdout.isatty()
|
||||||
|
state = {"resent": 0, "resynced": 0}
|
||||||
|
|
||||||
async def call(ftype, payload, ack_off=None):
|
async def call(ftype, payload, ack_off=None):
|
||||||
stage = {TYPE_OTA_BEGIN: "BEGIN", TYPE_OTA_DATA: "DATA",
|
stage = {TYPE_OTA_BEGIN: "BEGIN", TYPE_OTA_DATA: "DATA",
|
||||||
TYPE_OTA_END: "END", TYPE_OTA_ABORT: "ABORT"}.get(ftype, "?")
|
TYPE_OTA_END: "END", TYPE_OTA_ABORT: "ABORT"}.get(ftype, "?")
|
||||||
@ -315,7 +318,8 @@ async def ota_session(xfer, chunk, blob, version, target):
|
|||||||
rsp = await xfer(encode_frame(ftype, payload))
|
rsp = await xfer(encode_frame(ftype, payload))
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
if attempt < XFER_TRIES:
|
if attempt < XFER_TRIES:
|
||||||
print(" %s: ack timeout, resending (attempt %d/%d)"
|
state["resent"] += 1
|
||||||
|
print("\n %s: ack timeout, resending (attempt %d/%d)"
|
||||||
% (stage, attempt + 1, XFER_TRIES))
|
% (stage, attempt + 1, XFER_TRIES))
|
||||||
continue
|
continue
|
||||||
raise asyncio.TimeoutError("%s: no OTA_RSP after %d tries"
|
raise asyncio.TimeoutError("%s: no OTA_RSP after %d tries"
|
||||||
@ -327,36 +331,68 @@ async def ota_session(xfer, chunk, blob, version, target):
|
|||||||
if echo != ftype:
|
if echo != ftype:
|
||||||
raise RuntimeError("%s: RSP echo 0x%02X != 0x%02X" % (stage, echo, ftype))
|
raise RuntimeError("%s: RSP echo 0x%02X != 0x%02X" % (stage, echo, ftype))
|
||||||
if ftype == TYPE_OTA_BEGIN and status == ST_BAD_STATE:
|
if ftype == TYPE_OTA_BEGIN and status == ST_BAD_STATE:
|
||||||
|
state["resynced"] += 1
|
||||||
print(" BEGIN: session already open on device, resynced")
|
print(" BEGIN: session already open on device, resynced")
|
||||||
return ST_OK, offset
|
return ST_OK, offset
|
||||||
if ftype == TYPE_OTA_DATA and status == ST_BAD_STATE \
|
if ftype == TYPE_OTA_DATA and status == ST_BAD_STATE \
|
||||||
and ack_off is not None and offset == ack_off:
|
and ack_off is not None and offset == ack_off:
|
||||||
print(" DATA: chunk already stored (ack was lost), resynced")
|
state["resynced"] += 1
|
||||||
|
print("\n DATA: chunk already stored (ack was lost), resynced")
|
||||||
return ST_OK, offset
|
return ST_OK, offset
|
||||||
return status, offset
|
return status, offset
|
||||||
|
|
||||||
|
def progress(sent, total, t0, rtt_ms):
|
||||||
|
"""Fine-grained progress: live-updating bar on a tty (throttled to
|
||||||
|
~10 fps), one line per 5%% step when output is redirected."""
|
||||||
|
now = asyncio.get_event_loop().time()
|
||||||
|
dt = now - t0
|
||||||
|
pct = 100.0 * sent / total
|
||||||
|
rate = sent / 1024.0 / max(dt, 0.001)
|
||||||
|
if tty:
|
||||||
|
if sent != total and now - progress.last_draw < 0.1:
|
||||||
|
return
|
||||||
|
progress.last_draw = now
|
||||||
|
filled = int(pct / 100 * 24)
|
||||||
|
bar = "#" * filled + "-" * (24 - filled)
|
||||||
|
print(" [%s] %5.1f%% %d/%d B %.1f kB/s rtt %.0f ms "
|
||||||
|
% (bar, pct, sent, total, rate, rtt_ms),
|
||||||
|
end="\r" if sent != total else "\n", flush=True)
|
||||||
|
else:
|
||||||
|
step = int(pct // 5)
|
||||||
|
if sent == total or step != progress.last_step:
|
||||||
|
progress.last_step = step
|
||||||
|
print(" %d / %d bytes (%.0f%%, %.1f kB/s, rtt %.0f ms)"
|
||||||
|
% (sent, total, pct, rate, rtt_ms))
|
||||||
|
|
||||||
|
progress.last_draw = 0.0
|
||||||
|
progress.last_step = -1
|
||||||
|
|
||||||
|
print("OTA_BEGIN: open session (%d bytes, crc32=0x%08X) ..."
|
||||||
|
% (len(blob), crc32(blob)))
|
||||||
|
t_begin = asyncio.get_event_loop().time()
|
||||||
status, _ = await call(TYPE_OTA_BEGIN,
|
status, _ = await call(TYPE_OTA_BEGIN,
|
||||||
struct.pack("<III", len(blob), crc32(blob), version))
|
struct.pack("<III", len(blob), crc32(blob), version))
|
||||||
if status != 0:
|
if status != 0:
|
||||||
raise RuntimeError("OTA_BEGIN rejected, status=%d" % status)
|
raise RuntimeError("OTA_BEGIN rejected, status=%d" % status)
|
||||||
|
print("OTA_BEGIN ok (%.0f ms), streaming data ..."
|
||||||
|
% ((asyncio.get_event_loop().time() - t_begin) * 1000))
|
||||||
|
|
||||||
sent = 0
|
sent = 0
|
||||||
t0 = asyncio.get_event_loop().time()
|
t0 = asyncio.get_event_loop().time()
|
||||||
while sent < len(blob):
|
while sent < len(blob):
|
||||||
n = min(chunk, len(blob) - sent)
|
n = min(chunk, len(blob) - sent)
|
||||||
|
tf = asyncio.get_event_loop().time()
|
||||||
status, next_off = await call(TYPE_OTA_DATA,
|
status, next_off = await call(TYPE_OTA_DATA,
|
||||||
struct.pack("<I", sent) + blob[sent:sent + n],
|
struct.pack("<I", sent) + blob[sent:sent + n],
|
||||||
ack_off=sent + n)
|
ack_off=sent + n)
|
||||||
|
rtt_ms = (asyncio.get_event_loop().time() - tf) * 1000
|
||||||
if status != 0:
|
if status != 0:
|
||||||
raise RuntimeError("OTA_DATA rejected at %d, status=%d (device "
|
raise RuntimeError("OTA_DATA rejected at %d, status=%d (device "
|
||||||
"expects offset %d)" % (sent, status, next_off))
|
"expects offset %d)" % (sent, status, next_off))
|
||||||
sent += n
|
sent += n
|
||||||
if sent % 0x4000 < chunk or sent == len(blob):
|
progress(sent, len(blob), t0, rtt_ms)
|
||||||
dt = asyncio.get_event_loop().time() - t0
|
|
||||||
print(" %d / %d bytes (%.0f%%, %.1f kB/s)"
|
|
||||||
% (sent, len(blob), 100.0 * sent / len(blob),
|
|
||||||
sent / 1024.0 / max(dt, 0.001)))
|
|
||||||
|
|
||||||
|
print("OTA_END: verify image + switch bank ...")
|
||||||
try:
|
try:
|
||||||
status, _ = await call(TYPE_OTA_END, struct.pack("<I", crc32(blob)))
|
status, _ = await call(TYPE_OTA_END, struct.pack("<I", crc32(blob)))
|
||||||
if status != 0:
|
if status != 0:
|
||||||
@ -368,8 +404,9 @@ async def ota_session(xfer, chunk, blob, version, target):
|
|||||||
# is the real verdict
|
# is the real verdict
|
||||||
print("OTA_END ack lost (%s) - waiting for reboot anyway ..." % exc)
|
print("OTA_END ack lost (%s) - waiting for reboot anyway ..." % exc)
|
||||||
dt = asyncio.get_event_loop().time() - t0
|
dt = asyncio.get_event_loop().time() - t0
|
||||||
print("OTA_END done (%.1fs total), device reboots into APP%d ..."
|
print("OTA_END done (%.1fs total, %d resent, %d resynced), "
|
||||||
% (dt, target))
|
"device reboots into APP%d ..."
|
||||||
|
% (dt, state["resent"], state["resynced"], target))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@ -125,8 +125,8 @@
|
|||||||
:1007B000096A012211430322920611627047000068
|
:1007B000096A012211430322920611627047000068
|
||||||
:1007C000D00700010040002038080000D4040001D8
|
:1007C000D00700010040002038080000D4040001D8
|
||||||
:1040000011C011CA010000000080000170D800003A
|
:1040000011C011CA010000000080000170D800003A
|
||||||
:1040100071E15B2916000100004002019CD90000FB
|
:10401000ED3975A817000100004002019CD900008D
|
||||||
:0C4020009182AC82160001005D92C8D2B3
|
:0C4020000D5A82031700010074E93836C5
|
||||||
:106000007ADA12CA01000000F4010000000000006A
|
:106000007ADA12CA01000000F4010000000000006A
|
||||||
:106010000000000000000000000000000000000080
|
:106010000000000000000000000000000000000080
|
||||||
:106020000000000000000000000000000000000070
|
:106020000000000000000000000000000000000070
|
||||||
@ -784,8 +784,8 @@
|
|||||||
:10A8A000854203D134A003F037FB03E029463AA0E8
|
:10A8A000854203D134A003F037FB03E029463AA0E8
|
||||||
:10A8B00003F0CCFA09F002FA7D21C900FDF762FC31
|
:10A8B00003F0CCFA09F002FA7D21C900FDF762FC31
|
||||||
:10A8C000014639A003F0C2FA08F0F2FD01463AA0B1
|
:10A8C000014639A003F0C2FA08F0F2FD01463AA0B1
|
||||||
:10A8D00003F0BCFAF8BD00001600010056312E301E
|
:10A8D00003F0BCFAF8BD00001700010056312E301D
|
||||||
:10A8E000302E3232000000006669726D7761726549
|
:10A8E000302E3233000000006669726D7761726548
|
||||||
:10A8F0003A202573202830782530386C58290D0AE5
|
:10A8F0003A202573202830782530386C58290D0AE5
|
||||||
:10A90000000000006375722062616E6B3A20415056
|
:10A90000000000006375722062616E6B3A20415056
|
||||||
:10A910005025750D0A000000FF7F00006368697014
|
:10A910005025750D0A000000FF7F00006368697014
|
||||||
@ -871,7 +871,7 @@
|
|||||||
:10AE1000756520666C75736865640D0A0000000036
|
:10AE1000756520666C75736865640D0A0000000036
|
||||||
:10AE200010B506A108A003F011F80DA003F074F806
|
:10AE200010B506A108A003F011F80DA003F074F806
|
||||||
:10AE30001948016819A003F009F810BD56312E30E9
|
:10AE30001948016819A003F009F810BD56312E30E9
|
||||||
:10AE4000302E3232000000006669726D77617265E3
|
:10AE4000302E3233000000006669726D77617265E2
|
||||||
:10AE50002076657273696F6E3A2025730D0A0000C3
|
:10AE50002076657273696F6E3A2025730D0A0000C3
|
||||||
:10AE60006D636D2D6464632D626C653A20424C45C0
|
:10AE60006D636D2D6464632D626C653A20424C45C0
|
||||||
:10AE700028726474737329202B20467265655254BE
|
:10AE700028726474737329202B20467265655254BE
|
||||||
@ -2069,7 +2069,7 @@
|
|||||||
:10F8F000F0BD13E0FDF73AFB1049884201D1022028
|
:10F8F000F0BD13E0FDF73AFB1049884201D1022028
|
||||||
:10F9000000E00120694608740120009004AB224603
|
:10F9000000E00120694608740120009004AB224603
|
||||||
:10F910000799069800F014F809B0F0BD079809B0EF
|
:10F910000799069800F014F809B0F0BD079809B0EF
|
||||||
:10F92000F0BD0000FFFF00001600010000080240CB
|
:10F92000F0BD0000FFFF00001700010000080240CA
|
||||||
:10F9300094470020FF7F00000000204100400201AA
|
:10F9300094470020FF7F00000000204100400201AA
|
||||||
:10F9400030B4029C42540546491C88B22C54401CD9
|
:10F9400030B4029C42540546491C88B22C54401CD9
|
||||||
:10F95000002180B2002C07D95A5C2A54401C491C53
|
:10F95000002180B2002C07D95A5C2A54401C491C53
|
||||||
@ -2130,7 +2130,7 @@
|
|||||||
:10FCC0003D3D3D3D3D3D3D3D3D0A0000206D636DA8
|
:10FCC0003D3D3D3D3D3D3D3D3D0A0000206D636DA8
|
||||||
:10FCD0002D6464632D626C653A20424C45202B20D4
|
:10FCD0002D6464632D626C653A20424C45202B20D4
|
||||||
:10FCE0004672656552544F53202B20434C490A00FD
|
:10FCE0004672656552544F53202B20434C490A00FD
|
||||||
:10FCF00056312E30302E323200000000204669721C
|
:10FCF00056312E30302E323300000000204669721B
|
||||||
:10FD00006D776172652076657273696F6E202573F9
|
:10FD00006D776172652076657273696F6E202573F9
|
||||||
:10FD10000A000000004000202053797374656D4391
|
:10FD10000A000000004000202053797374656D4391
|
||||||
:10FD20006F7265436C6F636B203D20256C752048B6
|
:10FD20006F7265436C6F636B203D20256C752048B6
|
||||||
@ -4268,7 +4268,7 @@
|
|||||||
:1069D00034A003F037FB03E029463AA003F0CCFAD9
|
:1069D00034A003F037FB03E029463AA003F0CCFAD9
|
||||||
:1069E00009F002FA7D21C900FDF7CCFB014639A070
|
:1069E00009F002FA7D21C900FDF7CCFB014639A070
|
||||||
:1069F00003F0C2FA08F0F2FD01463AA003F0BCFA37
|
:1069F00003F0C2FA08F0F2FD01463AA003F0BCFA37
|
||||||
:106A0000F8BD00001600010056312E30302E323213
|
:106A0000F8BD00001700010056312E30302E323311
|
||||||
:106A1000000000006669726D776172653A20257327
|
:106A1000000000006669726D776172653A20257327
|
||||||
:106A2000202830782530386C58290D0A00000000E5
|
:106A2000202830782530386C58290D0A00000000E5
|
||||||
:106A30006375722062616E6B3A2041505025750D6E
|
:106A30006375722062616E6B3A2041505025750D6E
|
||||||
@ -4354,7 +4354,7 @@
|
|||||||
:106F300020384E312C207278207175657565206679
|
:106F300020384E312C207278207175657565206679
|
||||||
:106F40006C75736865640D0A0000000010B506A139
|
:106F40006C75736865640D0A0000000010B506A139
|
||||||
:106F500008A003F011F80DA003F074F819480168B7
|
:106F500008A003F011F80DA003F074F819480168B7
|
||||||
:106F600019A003F009F810BD56312E30302E323200
|
:106F600019A003F009F810BD56312E30302E3233FF
|
||||||
:106F7000000000006669726D776172652076657247
|
:106F7000000000006669726D776172652076657247
|
||||||
:106F800073696F6E3A2025730D0A00006D636D2DD5
|
:106F800073696F6E3A2025730D0A00006D636D2DD5
|
||||||
:106F90006464632D626C653A20424C4528726474C7
|
:106F90006464632D626C653A20424C4528726474C7
|
||||||
@ -5553,7 +5553,7 @@
|
|||||||
:10BA2000FDF73AFB1049884201D1022000E00120D5
|
:10BA2000FDF73AFB1049884201D1022000E00120D5
|
||||||
:10BA3000694608740120009004AB224607990698D5
|
:10BA3000694608740120009004AB224607990698D5
|
||||||
:10BA400000F014F809B0F0BD079809B0F0BD00008F
|
:10BA400000F014F809B0F0BD079809B0F0BD00008F
|
||||||
:10BA5000FFFF00001600010000080240944700208C
|
:10BA5000FFFF00001700010000080240944700208B
|
||||||
:10BA6000FF7F0000000020410040020130B4029C32
|
:10BA6000FF7F0000000020410040020130B4029C32
|
||||||
:10BA700042540546491C88B22C54401C002180B217
|
:10BA700042540546491C88B22C54401C002180B217
|
||||||
:10BA8000002C07D95A5C2A54401C491CC9B280B208
|
:10BA8000002C07D95A5C2A54401C491CC9B280B208
|
||||||
@ -5614,7 +5614,7 @@
|
|||||||
:10BDF0003D3D3D3D3D0A0000206D636D2D64646353
|
:10BDF0003D3D3D3D3D0A0000206D636D2D64646353
|
||||||
:10BE00002D626C653A20424C45202B2046726565B8
|
:10BE00002D626C653A20424C45202B2046726565B8
|
||||||
:10BE100052544F53202B20434C490A0056312E30A8
|
:10BE100052544F53202B20434C490A0056312E30A8
|
||||||
:10BE2000302E323200000000204669726D77617258
|
:10BE2000302E323300000000204669726D77617257
|
||||||
:10BE3000652076657273696F6E2025730A000000B5
|
:10BE3000652076657273696F6E2025730A000000B5
|
||||||
:10BE4000004000202053797374656D436F72654321
|
:10BE4000004000202053797374656D436F72654321
|
||||||
:10BE50006C6F636B203D20256C7520487A0A0000CA
|
:10BE50006C6F636B203D20256C7520487A0A0000CA
|
||||||
|
|||||||
Binary file not shown.
@ -2,6 +2,6 @@
|
|||||||
"file": "caiic_ble_dual_ota.bin",
|
"file": "caiic_ble_dual_ota.bin",
|
||||||
"target_bank": 1,
|
"target_bank": 1,
|
||||||
"size": 55408,
|
"size": 55408,
|
||||||
"crc32": "0x295BE171",
|
"crc32": "0xA87539ED",
|
||||||
"version": 65558
|
"version": 65559
|
||||||
}
|
}
|
||||||
Binary file not shown.
@ -2,6 +2,6 @@
|
|||||||
"file": "caiic_ble_dual_ota_app2.bin",
|
"file": "caiic_ble_dual_ota_app2.bin",
|
||||||
"target_bank": 2,
|
"target_bank": 2,
|
||||||
"size": 55708,
|
"size": 55708,
|
||||||
"crc32": "0x82AC8291",
|
"crc32": "0x03825A0D",
|
||||||
"version": 65558
|
"version": 65559
|
||||||
}
|
}
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -125,8 +125,8 @@
|
|||||||
:1007B000096A012211430322920611627047000068
|
:1007B000096A012211430322920611627047000068
|
||||||
:1007C000D00700010040002038080000D4040001D8
|
:1007C000D00700010040002038080000D4040001D8
|
||||||
:1040000011C011CA010000000080000170D800003A
|
:1040000011C011CA010000000080000170D800003A
|
||||||
:1040100071E15B29160001000000000000000000B3
|
:10401000ED3975A817000100000000000000000045
|
||||||
:0C40200000000000000000007AA93E0C27
|
:0C4020000000000000000000CEA45101D0
|
||||||
:10800000D8B90020698100017181000139B10001F6
|
:10800000D8B90020698100017181000139B10001F6
|
||||||
:108010000000000000000000000000000000000060
|
:108010000000000000000000000000000000000060
|
||||||
:10802000000000000000000000000000FDB400019E
|
:10802000000000000000000000000000FDB400019E
|
||||||
@ -780,8 +780,8 @@
|
|||||||
:10A8A000854203D134A003F037FB03E029463AA0E8
|
:10A8A000854203D134A003F037FB03E029463AA0E8
|
||||||
:10A8B00003F0CCFA09F002FA7D21C900FDF762FC31
|
:10A8B00003F0CCFA09F002FA7D21C900FDF762FC31
|
||||||
:10A8C000014639A003F0C2FA08F0F2FD01463AA0B1
|
:10A8C000014639A003F0C2FA08F0F2FD01463AA0B1
|
||||||
:10A8D00003F0BCFAF8BD00001600010056312E301E
|
:10A8D00003F0BCFAF8BD00001700010056312E301D
|
||||||
:10A8E000302E3232000000006669726D7761726549
|
:10A8E000302E3233000000006669726D7761726548
|
||||||
:10A8F0003A202573202830782530386C58290D0AE5
|
:10A8F0003A202573202830782530386C58290D0AE5
|
||||||
:10A90000000000006375722062616E6B3A20415056
|
:10A90000000000006375722062616E6B3A20415056
|
||||||
:10A910005025750D0A000000FF7F00006368697014
|
:10A910005025750D0A000000FF7F00006368697014
|
||||||
@ -867,7 +867,7 @@
|
|||||||
:10AE1000756520666C75736865640D0A0000000036
|
:10AE1000756520666C75736865640D0A0000000036
|
||||||
:10AE200010B506A108A003F011F80DA003F074F806
|
:10AE200010B506A108A003F011F80DA003F074F806
|
||||||
:10AE30001948016819A003F009F810BD56312E30E9
|
:10AE30001948016819A003F009F810BD56312E30E9
|
||||||
:10AE4000302E3232000000006669726D77617265E3
|
:10AE4000302E3233000000006669726D77617265E2
|
||||||
:10AE50002076657273696F6E3A2025730D0A0000C3
|
:10AE50002076657273696F6E3A2025730D0A0000C3
|
||||||
:10AE60006D636D2D6464632D626C653A20424C45C0
|
:10AE60006D636D2D6464632D626C653A20424C45C0
|
||||||
:10AE700028726474737329202B20467265655254BE
|
:10AE700028726474737329202B20467265655254BE
|
||||||
@ -2065,7 +2065,7 @@
|
|||||||
:10F8F000F0BD13E0FDF73AFB1049884201D1022028
|
:10F8F000F0BD13E0FDF73AFB1049884201D1022028
|
||||||
:10F9000000E00120694608740120009004AB224603
|
:10F9000000E00120694608740120009004AB224603
|
||||||
:10F910000799069800F014F809B0F0BD079809B0EF
|
:10F910000799069800F014F809B0F0BD079809B0EF
|
||||||
:10F92000F0BD0000FFFF00001600010000080240CB
|
:10F92000F0BD0000FFFF00001700010000080240CA
|
||||||
:10F9300094470020FF7F00000000204100400201AA
|
:10F9300094470020FF7F00000000204100400201AA
|
||||||
:10F9400030B4029C42540546491C88B22C54401CD9
|
:10F9400030B4029C42540546491C88B22C54401CD9
|
||||||
:10F95000002180B2002C07D95A5C2A54401C491C53
|
:10F95000002180B2002C07D95A5C2A54401C491C53
|
||||||
@ -2126,7 +2126,7 @@
|
|||||||
:10FCC0003D3D3D3D3D3D3D3D3D0A0000206D636DA8
|
:10FCC0003D3D3D3D3D3D3D3D3D0A0000206D636DA8
|
||||||
:10FCD0002D6464632D626C653A20424C45202B20D4
|
:10FCD0002D6464632D626C653A20424C45202B20D4
|
||||||
:10FCE0004672656552544F53202B20434C490A00FD
|
:10FCE0004672656552544F53202B20434C490A00FD
|
||||||
:10FCF00056312E30302E323200000000204669721C
|
:10FCF00056312E30302E323300000000204669721B
|
||||||
:10FD00006D776172652076657273696F6E202573F9
|
:10FD00006D776172652076657273696F6E202573F9
|
||||||
:10FD10000A000000004000202053797374656D4391
|
:10FD10000A000000004000202053797374656D4391
|
||||||
:10FD20006F7265436C6F636B203D20256C752048B6
|
:10FD20006F7265436C6F636B203D20256C752048B6
|
||||||
|
|||||||
Binary file not shown.
@ -2,6 +2,6 @@
|
|||||||
"file": "mothercup_ble_prod_ota.bin",
|
"file": "mothercup_ble_prod_ota.bin",
|
||||||
"target_bank": 1,
|
"target_bank": 1,
|
||||||
"size": 55408,
|
"size": 55408,
|
||||||
"crc32": "0x295BE171",
|
"crc32": "0xA87539ED",
|
||||||
"version": 65558
|
"version": 65559
|
||||||
}
|
}
|
||||||
Binary file not shown.
@ -2,6 +2,6 @@
|
|||||||
"file": "mothercup_ble_prod_ota_app2.bin",
|
"file": "mothercup_ble_prod_ota_app2.bin",
|
||||||
"target_bank": 2,
|
"target_bank": 2,
|
||||||
"size": 55708,
|
"size": 55708,
|
||||||
"crc32": "0x82AC8291",
|
"crc32": "0x03825A0D",
|
||||||
"version": 65558
|
"version": 65559
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user