[RDA8910 CSDK系列]724ug 差分fota之证实-附带ota简要流程分析

这两天在学习csdk系统,昨晚销售小哥给了一个链接:http://doc.openluat.com/article/1416/0 其中零妖大佬说了关于cat1 差分升级的事。

本着求实的精神,就很像知道确凿的证据,最好有代码或者数据的依据。

所以今天特意准备了下评估板子,看看能不能拿到些直观的线索。

第一个想到的就是通过coolwatcher追查系统的日志。这里有个开发板和我的usb uart小板电平不匹配的小插曲,定位此问题又额外浪费了点时间,暂不展开,如果有人想细究再补充,先说结论:想稳定看coolwatcher的日志,你需要使用host log的串口方式,而不是用usb方式。

测试使用的是官方的ota平台: iot.openluat.com ,设备初始代码是自己编译的测试包, ota包使用同样的代码,只是改了下版本号,因为主要是验证流程,所以不用关注功能逻辑。

fota包的下载使用的是http,注意是http,不是https,主要原因就是简单,https是趋势。

第一步:

通过http获取到文件大小,这里对应是的是Content-Length

[ota] HTTPClientFindFirstHeader 21,Content-Length: 48330

[ota]GetSize fsz: 48330

6M左右的原始bin档,实际的下载大小只有48K左右,这就说明下载的是差分,而不是全量包。

第二步:

ota_parse otaProcess file size 48320, type 1

从48330 变成了48320 说明有10byte可能是控制描述数据,不细表。

第三步:

[ota] HTTPClientReadData readSize 511

[ota] HTTPClientReadData readTotalLen 1022, 48330

每次下载511个字节,一包一包开始下载

第四步:

中间重复无数包,通过总包大小控制下载次数,直到最后一包下载完成

[ota]--HTTPIntrnConnectionClose--

ota_parse otaDownloadDone appState 3 CoreState 1

[ota_parse] FILE: app 48320 0

app应该是文件名,48320是大小,0 是属性或者权限之类的吧。

第五步:校验

ota_app crc (f7ddf30f,f7ddf30f)

ota openat_newApp appImageIsVaild ok

使用的应该是crc32 的校验的多包累加和,纯瞎猜,不求证

第六步:更新ota的标志

ota check 1,0

ota check 1,1

ota OPENAT_newOtaFlagSet 102

这个102应该就是告诉bootloader这个是刚ota完成,第一次需要做些特殊的工作。

第七步:下载完成

ota_parse _otaDownloadDone ok

[ota]fota end 0

看日志,整个升级48k大小的样子,花了6s完成,基本无感知,所以如果你用usb方式看日志,可能coolwatch还没连接上,升级就完成了

nordic 如何使用单分区OTA模式

ref:https://devzone.nordicsemi.com/f/nordic-q-a/48364/v15-3-dfu-use-single-bank-directly

v15.3 DFU use single bank directly

Note that for SDK v12.3 : if application size * 2 > available space a single bank update is performed.

While I am using v15.3 and there seems no more infor about the single bank and dual bank settings, I want to free more space for data storage and disable dual bank dfu, my question is how to use single bank dfu directly?
solution1: final I find the NRF_DFU_SINGLE_BANK_APP_UPDATES in https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v15.3.0%2Flib_bootloader_dfu_banks.html&cp=5_1_3_5_1_2

solution2: increase the NRF_DFU_APP_DATA_AREA_SIZE to make the space less than dual bank.
Thanks for answering your question. Just want to add that option two may be better as it will prevent the bootloader from overwriting the app data in case an image is also too big for a single bank update.

refs:
https://gitee.com/hiproz/pub-res/blob/master/Dual-bank%20and%20single-bank%20updates.pdf

IOS device support

问题

当你升级了macos,xcode自带的iphone支持版本和你iphone不一致时(比如手动升级的beta版本等),这时候xcode是无法正常调试和下载ios app的。

解决办法

增加对应ios的DeviceSupport文件,手动添加到xcode的对应目录:

更多请见:
https://developer.apple.com/download/
https://developer.apple.com/download/more/

起点

一直在等待的那个开点,那是一个既许了无数幻想和冲动的起点,那个演绎了无数次,却始终无法清晰和开始的起点,此刻,伴随着熟悉而奇怪的音乐涌起的冲动,一个声音在告诉我,是的,就是现在,我感受到了起点,竟是是如此普通的时刻。

pads settings

  1. exec path

    \MentorGraphics\PADSVX.2.3\SDD_HOME\common\win32\bin\powerlogic.exe
    \MentorGraphics\PADSVX.2.3\SDD_HOME\common\win32\bin\powerpcb.exe
  2. how to set the "PADS Projects" path

    \MentorGraphics\PADSVX.2.3\SDD_HOME\Programs\powerlogic.ini
    \MentorGraphics\PADSVX.2.3\SDD_HOME\Programs\powerpcb.ini

clang-format 参考配置

贴一份在用的参考配置,欢迎大家讨论

BasedOnStyle: LLVM
Language: Cpp
ColumnLimit: 200
# 允许对注释排版
ReflowComments: false
# 允许修改头文件顺序
SortIncludes: false

#括号风格
BreakBeforeBraces: Custom
BraceWrapping:
  AfterFunction: true
  AfterEnum: false
  AfterStruct: false
  SplitEmptyFunction: false # 空函数,括号可以同行

# 注释左对齐
AlignTrailingComments: true
# 单行函数也要换行
AllowShortFunctionsOnASingleLine: false
## 是否允许短if语句单行
AllowShortIfStatementsOnASingleLine: true
# 单行循环可以单行,比如while1 和空for等
AllowShortLoopsOnASingleLine: true
# 自动换行后,二元运算符总在前
BreakBeforeBinaryOperators: true
# 缩进宽度
IndentWidth: 4
# 连续声明时,对齐所有声明的变量名
AlignConsecutiveDeclarations:   true
# 针和引用的对齐: Left, Right, Middle
PointerAlignment:   Left
# 在C风格类型转换后添加空格
SpaceAfterCStyleCast:   false
# 在赋值运算符之前添加空格
SpaceBeforeAssignmentOperators: true
# 开圆括号之前添加一个空格: Never, ControlStatements, Always
SpaceBeforeParens:  ControlStatements
# 在空的圆括号中添加空格
SpaceInEmptyParentheses:    false
# 在尾随的评论前添加的空格数(只适用于//)
SpacesBeforeTrailingComments:   2
# 在尖括号的<后和>前添加空格
SpacesInAngles: true
# 宏赋值对齐
AlignConsecutiveMacros: true