你好, 谢谢你的确认。 计算部分是好的。现在来看看另一个问题。我以同样的方式实现,流程如下所示。 (1)我得到一个通知0x10,表示“SPOTA_IMG_STARTED SPOTA Started for downloading image”。(在此之前还有几个步骤,我在这里没有提到) (2)写GattwriteCharvalue(Spota_patch_len) - 在我的情况下是240。 (3) GATTWriteNoResp (SPOTA_PATCH_DATA) -写入240字节的。img文件,20字节粒度。 (4)这里我假设获得通知(SPOTA_SERV_STATUS=OK)完成240字节。 (4.问题1)我的问题是,我写了240字节后没有收到通知,我写了260字节后收到通知,通知之后是每240字节,直到最后一个块,为什么会这样?(将在下面讨论最后一部分) (4.q.2)如果它是将前20个字节作为标题,我该怎么办。我需要单独写标题吗? (4.问题3)如果是,这个头是由kmimage生成的.img文件的前20个字节吗?或者我需要显式地写这个头文件吗? (4.问题4)如果标题上的信息(如上所述)是错误的,请让我知道在这种情况下什么是正确的? 假设这一点(单独写一个标题),我确实继续我的实验进一步,并且观察结果如下。 (5) I got Notification(SPOTA_SERV_STATUS=OK) after first 260 bytes and again have written…GATTWriteCharValue(SPOTA_PATCH_LEN) with 240 byte and write data…等等……然后写入最后一块数据块的12x20,并获得通知(SPOTA_SERV_STATUS=OK)!! (6.Q)正如你解释的,我应该在12x20写完之后才会收到通知,但是没有发生,有什么问题吗? 如果我用GATTReadCharValue(SPOTA_MEM_INFO)查询mem信息,我得到一个值0x7DA0(32160)差值是244,不确定哪里出错了!
你好,
我正在尝试通过实际业务应用程序实施/结合这个型话。我正在遵循AN-B-003_1.PDF中给出的话语流程。
我有几个问题:
(1)我引用的是正确的文档,SUotA Flow适合于此吗?
(2)什么是ACK?它会给出0x00吗?0 x01吗?
布罗尔,
Govind.
嗨ggotta,
1)这是配置文件的规格,其他附加资源的SUOTA配置文件可以在AN-B-010 da14580使用SUOTA(软件通过空中更新),也在教程部分教程6:添加软件通过空中更新。
2)您的意思是您看到的ACK是图2:SUOTA流程图?这ACK生成从堆栈,因为设备使用的命令是GATTWriteCharValue规范定义了应该有反应的装置,它不是一个响应,你应该简洁发送从您的应用程序,它们是写反应写请求中央派。
由于MT_dialog
你好,
谢谢您的回复。
我指的是这两个应用程序笔记。我的情况略有不同。我在SUOTA上有不同的工作领域
(Case-I)在接收端/响应端/设备端添加OTA支持-这部分已经完成。现在我可以使用SUOTA android应用程序更新固件。
(case - ii)在上述情况下,启动器是移动小工具和SUOTA应用程序。在我的情况下,我希望写我自己的应用程序类似于SUOTA Android应用程序,但在c++不同的原因。
我的问题与案例二有关。现在,
Q1:为了完成我的案例ii,我参考图2:AN-B-003_1.pdf的SUOTA流程图(PageNo14)。那么,我引用的文档正确吗?
Q1.1)如果是,那么你能帮我得到更多的信息如下:
Q1.1.1)在第7节SUotA流中确切的ACK是什么?我们应该接收0x01还是0x00?如果想验证响应的成功或失败案例,它应该是什么?
在AN-B-003_1.pdf中,page:8, Table 3: SPOTA_MEM_DEV for SUOTA mode定义:
0 x00:老
# 1 0 x01:形象
# 1 0 x02:形象
究竟它是什么意思?在我的情况下,Byte#3是0x13(SPI)
在4.2.4节中,SPOTA_PATCH_LEN到底应该是什么?它的总文件大小?闪存块大小?或者每次传输的字节数?
在我的例子中,bin文件大小是33404字节。你能举个例子解释一下吗?
Q1.2)如果否,请您能通过正确的来源/来源来指导我来实施案例-II吗?
布罗尔,
Govind。
嗨ggotta,
Q1)是的,这是SUOTA配置文件的规范,没有其他文件描述该程序。
Q.1.1.1)我已经提到了ACK,你看到的是写的写请求响应你的中央,毫无攻击力水平确认SUOTA,写作是接受的奴隶,毫无特色,它收到0 x01或0 x00为了证实写作,ACK是从从机到主机的写响应,包括命令的状态,包括ATT错误码。
Q.1.1.2) SPOTA_MEM_DEV显示它使用的内存,0x13(第3字节)表示使用的内存是一个SPI内存,中间的两个字节总是0,零位上的字节表示SUOTA配置文件将更新哪个内存银行0x00(将更新保存最老映像的银行)0x01和0x02对应于0x8000和0x13000银行。
正如文档所指出的,在SUOTA的情况下,特征定义了一次要发送的图像数据的长度,例如,如果保留默认的块大小240,特征的值应该是0x00 F0。
Q.1.2)关于启动器的例子,可以提供android和iOS的SUOTA应用程序,可以根据需要提供,需要我发送过来吗?
由于MT_dialog
非常感谢你提供的细节。
举个例子,我有一个image_size为32440字节的image_size,我写了一个feature, block_size为240字节。
因此,现在我的块写入计数为135(240)个字节+ 1(共40个)字节i.E 32440/240 = 240x135 + 40。
并且每个块将被写入MTU(20字节)的最大大小。
请确认!
Q.1.1.4)我假设通知是默认启用的。启动器应该能够为每个块写入获得一个通知。如果我错了,请纠正我。
布罗尔,
Govind.
顺便说一下,如果你能提供一个这些(android /iPhone)资源供我参考,那将是非常有帮助的。
谢谢你!
布罗尔,
Govind.
你好,
问题1.1.4很好。我能收到通知。但我还是不清楚我的问题1.1.3,请帮助我。
问题1.1.5)在SPOTA_SERV_STATUS状态中什么是SPOTA_SERV_STATUS = OK ?是SPOTAR_CMP_OK (0x02)吗?
布罗尔,
Govind.
嗨ggotta,
关于你的计算,是的,你是正确的你会有135 * 240 +额外的图像大小,设备将执行12 20字节写命令每个为了完成一个240字节块然后它会写NV内存作为一个- b - 003. - pdf表示,然后从外设发送一个通知,指示正确的写入到NV内存,以便中央将继续处理下一批数据,是的,ok的值是0x02。
由于MT_dialog
你好,
谢谢你的确认。
计算部分是好的。现在来看看另一个问题。我以同样的方式实现,流程如下所示。
(1)我得到一个通知0x10,表示“SPOTA_IMG_STARTED SPOTA Started for downloading image”。(在此之前还有几个步骤,我在这里没有提到)
(2)写GattwriteCharvalue(Spota_patch_len) - 在我的情况下是240。
(3) GATTWriteNoResp (SPOTA_PATCH_DATA) -写入240字节的。img文件,20字节粒度。
(4)这里我假设获得通知(SPOTA_SERV_STATUS=OK)完成240字节。
(4.问题1)我的问题是,我写了240字节后没有收到通知,我写了260字节后收到通知,通知之后是每240字节,直到最后一个块,为什么会这样?(将在下面讨论最后一部分)
(4.q.2)如果它是将前20个字节作为标题,我该怎么办。我需要单独写标题吗?
(4.问题3)如果是,这个头是由kmimage生成的.img文件的前20个字节吗?或者我需要显式地写这个头文件吗?
(4.问题4)如果标题上的信息(如上所述)是错误的,请让我知道在这种情况下什么是正确的?
假设这一点(单独写一个标题),我确实继续我的实验进一步,并且观察结果如下。
(5) I got Notification(SPOTA_SERV_STATUS=OK) after first 260 bytes and again have written…GATTWriteCharValue(SPOTA_PATCH_LEN) with 240 byte and write data…等等……然后写入最后一块数据块的12x20,并获得通知(SPOTA_SERV_STATUS=OK)!!
(6.Q)正如你解释的,我应该在12x20写完之后才会收到通知,但是没有发生,有什么问题吗?
如果我用GATTReadCharValue(SPOTA_MEM_INFO)查询mem信息,我得到一个值0x7DA0(32160)差值是244,不确定哪里出错了!
尽早回复会有很大帮助。谢谢你!
为您的信息,
-相同的图像文件(.img)与SUOTA android应用程序工作良好。
我在SPOTA_PATCH_LEN上做的其他尝试,即大于240,小于240,出现了不同的问题,比如错误0x07,但现在会忽略。
布罗尔,
Govind.
嗨ggotta,
(4.quq.1)我无法想象有什么导致设备在260字节上发送辅验通知,正常操作是我提到了240字节后的通知,然后设备应该在NV内存中写下数据并发送数据通知。我在接受文档时发送带有SLA的邮件,以获取Suota Android和IOS启动器应用程序的源代码,请以此为例。雷竞技安卓下载
(4.Q.2)上传到设备的图像包括图像标题,但这无需任何特殊处理,其部分图像。
(4.问题3)镜像头是由mk_image.exe和你在运行mk_image.exe时在命令行中应用的fw版本(和.bin文件offouce)生成的(查看UM-B-012创建辅助引导加载器.pdf章节7和附录a的详细信息)。
由于MT_dialog
谢谢你的细节。
(问题1 . 4.)。这个问题得到了解决。现在我得到SPOTAR_CMP_OK为每240,然后我能够写一个所有的数据,包括最后一次chuck。
现在,我得到CRC错误。我正在阅读的文件与fread()和伪代码如下:
1.Len = fread(buf, 1, 20, fd);
2.同样的“buf”我正在使用to to spota_patch_data char。
这一次我确定我所有的数据32404字节被转移,mem信息读请求也给出相同的值。
布罗尔,
Govind。
嗨
我确实验证了弄清楚CRC原因的所有可能方法,并观察到图像标题中的“图像ID”始终被读取为FF。
70 51 ff 01.....其他成功案例70 51 AA 01....对此有什么想法吗?
布罗尔,
Govind.
嗨ggotta,
你的图像的最后一个字节应该包含整个图像的crc(这是手机应用程序做的事情),所以当设备接收到的字节与最后一个字节的crc的整个图像的spot .state。crc_clac结果为零(如果接收的字节是正确的,并且CRC是正确的)。如果映像中没有这个最后的CRC字节,应用程序将会导致一个错误(在交换机的SPOTAR_IMG_END情况下,您可以在app_spotar_read_mem()函数中检查)。我已经将SUOTA电话申请发送到注册的电子邮件帐户。
由于MT_dialog
谢谢你!
顺便说一下,当我试图比较回读的图像(我使用我的OTA应用程序传输),字节匹配1- 1除了imageID。图像ID字节[2]= 0xFF
附加了屏幕截图以供参考。
右侧窗格中的“内存内容”区域是我使用定制应用程序传输的数据。
一个在左边窗格的“数据文件内容”,再次是一个读回文件,我使用SUOTA android应用程序转移。我已经读了它,保留在一边,只是在这里打开比较。
我的问题是
为什么我得到0x13002作为0xFF而不是0xFF?跟CRC有关系吗?
5.Q.2)如果我附加这个CRC,我是否需要改变长度?我认为不是必需的!在我的情况下,最后一个查克是4个字节(33404/240 + 4)。我添加CRC它将是5个字节!
如果我错了,请纠正我。
布罗尔,
Govind.
谢谢!一切都很好,在线旅行社正在运作!
布罗尔,
Govind.
嗨ggotta,
很高兴你来了,谢谢你的暗示。
由于MT_dialog