你好, 谢谢你的确认。 计算部分是好的。现在来看看另一个问题。我以同样的方式实现,流程如下所示。 (1)我收到了一个通知0x10,指示“spota_img_started spota开始下载图像”。(在此之前几个步骤,我在这里没有提到) (2) Write GATTWriteCharValue (SPOTA_PATCH_LEN) -在我的例子中是240。 (3) GATTWriteNoResp (SPOTA_PATCH_DATA) -写入240字节的。img文件,20字节粒度。 (4)这里我假设获得通知(SPOTA_SERV_STATUS=OK)完成240字节。 (4.Q.1)这是我的问题,我在写240字节后我没有收到通知我在编写260字节后,在通知之后,每240个字节后,直到最后但是为什么它是如此?(将在下面讨论最后一块) (4.Q.2)如果在情况下,如果它是采取头20个字节,我应该做什么。我需要单独写头文件吗? (4.q.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查询memoy(spota_mem_info,我得到一个值0x7da0(32160)差异是244,不确定出了什么问题!
你好,
我正在尝试通过实际的业务应用程序实现/合并这个SUOTA应用程序。我遵循AN-B-003_1.pdf中给出的SUotA流程。
我有很少的问题:
(1)我推荐一个正确的文件,偶像流是适合这个的吗?
(2)什么是ACK?它会给出0x00吗?0 x01吗?
Br,
Govind
嗨ggotta,
1)这是配置文件的规格,其他附加资源的SUOTA配置文件可以在AN-B-010 da14580使用SUOTA(软件通过空中更新),也在教程部分教程6:添加软件通过空中更新。
2)你的意思是你看到的图2:Suota流程图?从堆栈中生成那个ACK,因为设备使用的命令是GattwriteCharvalue,规范定义了该设备的响应,它不是您应该从应用程序中爆发的响应,它们是写入响应中央发送的写请求。
由于MT_dialog
你好,
谢谢您的回复。
我推荐这两个应用笔记。我的案子很小。我有不同的领域,可以在苏诺
(Case-I)在接收端/响应端/设备端添加OTA支持-这部分已经完成。现在我可以使用SUOTA android应用程序更新固件。
(case - ii)在上述情况下,启动器是移动小工具和SUOTA应用程序。在我的情况下,我希望写我自己的应用程序类似于SUOTA Android应用程序,但在c++不同的原因。
我的问题与案例-II有关。现在,
Q1:全氟于我的案例-II,我参考了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:老
0x01:图像#1
# 1 0 x02:形象
它到底意味着什么?在我的情况下,字节#3是0x13(SPI)
在4.2.4节中,SPOTA_PATCH_LEN到底应该是什么?它的总文件大小?闪存块大小?或者每次传输的字节数?
在我的情况下,Bin文件大小为33404字节。你能用一个例子解释一下吗?
Q1.2)如果没有,您能否指导我通过正确的文件来源/文件来源来实施案例ii ?
Br,
Govind。
嗨ggotta,
Q1)是的,这是SUOTA配置文件的规范,没有其他文件描述该程序。
Q.1.1.1)当我已经提到了你所看到的写回复你的中心的写回复的ACK时,没有从奴隶接受写作的课程的ATT级别确认,没有特征它接收0x01或0x00以确认写入,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
非常感谢细节。
Q.1.1.3)例如,我有一个映射32440字节的Image_size,我已经写成了240的block_size的字符。
所以,现在我的块写计数将是135(240)字节+ 1(40)字节,即32440/240 = 240x135 + 40。
每个块都将写入MTU(20字节)的最大大小。
请确认!
Q.1.1.4)我假设通知是默认实现。启动器应该能够为每个块写入的通知。如果我错了,请纠正我。
Br,
Govind
顺便说一下,如果您可以为我的参考提供其中一个(adroid / iPhone)来源,则会有很大的帮助。
谢谢!
Br,
Govind
你好,
问题1.1.4很好。我能收到通知。但我还是不清楚我的问题1.1.3,请帮助我。
问题1.1.5)在SPOTA_SERV_STATUS状态中什么是SPOTA_SERV_STATUS = OK ?是SPOTAR_CMP_OK (0x02)吗?
Br,
Govind
嗨ggotta,
关于你的计算,是的,你是正确的你会有135 * 240 +额外的图像大小,设备将执行12 20字节写命令每个为了完成一个240字节块然后它会写NV内存作为一个- b - 003. - pdf表示,然后从外设发送一个通知,指示正确的写入到NV内存,以便中央将继续处理下一批数据,是的,ok的值是0x02。
由于MT_dialog
你好,
谢谢你的确认。
计算部分是好的。现在来看看另一个问题。我以同样的方式实现,流程如下所示。
(1)我收到了一个通知0x10,指示“spota_img_started spota开始下载图像”。(在此之前几个步骤,我在这里没有提到)
(2) Write GATTWriteCharValue (SPOTA_PATCH_LEN) -在我的例子中是240。
(3) GATTWriteNoResp (SPOTA_PATCH_DATA) -写入240字节的。img文件,20字节粒度。
(4)这里我假设获得通知(SPOTA_SERV_STATUS=OK)完成240字节。
(4.Q.1)这是我的问题,我在写240字节后我没有收到通知我在编写260字节后,在通知之后,每240个字节后,直到最后但是为什么它是如此?(将在下面讨论最后一块)
(4.Q.2)如果在情况下,如果它是采取头20个字节,我应该做什么。我需要单独写头文件吗?
(4.q.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查询memoy(spota_mem_info,我得到一个值0x7da0(32160)差异是244,不确定出了什么问题!
最早的回应将是一个很大的帮助。谢谢!
供您参考,
- 使用Suota Android应用程序工作正常的图像文件(.img)。
- 我通过使用spota_patch_len的其他尝试,即超过240,少于240,进入不同的问题,如错误0x07,但现在将忽略。
Br,
Govind
嗨ggotta,
(4.Q.1)我无法想象什么会导致设备发送一个260字节的SUOTA通知,正确的操作是,正如我提到的240字节后的通知,然后设备应该在nv内存中写入数据并发送通知。我已经发送了一封带有SLA的邮件,以便在接受文档后获取SUOTA android和iOS initiator应用的源代码,请以此为例。雷竞技安卓下载
(4.Q.2)上传到设备的图像包括图像头,但这不需要任何特殊处理,它是图像的一部分。
(4.Q.3)图像标题由MK_Image.exe和运行MK_Image.exe的命令行中应用(和.bin文件offcouse)生成的fw版本(检查UM-B-012在第7节和附录A中创建辅助引导Loader.pdf以获取详细信息)。
由于MT_dialog
谢谢你的细节。
(问题1 . 4.)。这个问题得到了解决。现在我得到SPOTAR_CMP_OK为每240,然后我能够写一个所有的数据,包括最后一次chuck。
现在,我得到CRC错误。我正在阅读的文件与fread()和伪代码如下:
1. LEN = Fread(BUF,1,20,FD);
2.和我用来写入SPOTA_PATCH_DATA char的'buf'相同。
这一次我确定我所有的数据32404字节被转移,mem信息读请求也给出相同的值。
Br,
Govind。
你好
我验证了所有可能的方法来找出CRC的原因,并观察到“图像id”在图像头中被读为FF总是。
70 51 FF 01 .....在其他成功案例70 51 AA 01 ....对此有什么想法?
Br,
Govind
嗨ggotta,
你的图像的最后一个字节应该包含整个图像的crc(这是手机应用程序做的事情),所以当设备接收到的字节与最后一个字节的crc的整个图像的spot .state。crc_clac结果为零(如果接收的字节是正确的,并且CRC是正确的)。如果映像中没有这个最后的CRC字节,应用程序将会导致一个错误(在交换机的SPOTAR_IMG_END情况下,您可以在app_spotar_read_mem()函数中检查)。我已经将SUOTA电话申请发送到注册的电子邮件帐户。
由于MT_dialog
谢谢!
顺便说一下,当我尝试比较读取的图像(使用我的OTA应用程序传输)时,除了imageId之外的1-to-1匹配的字节。图像ID字节[2] = 0xFF
附上截图供参考。
右窗格“内存内容”区域中的一个是读取我使用自定义应用程序传输的数据。
一个在左窗格的“数据文件内容”中,再次是我使用Suota Android应用程序传输的读取文件。我已经读过它,留在旁边,刚在这里打开以进行比较。
我的问题是
为什么我得到0x13002作为0xFF而不是0xFF?跟CRC有关系吗?
如果我添加这个CRC,我需要改变长度吗?我想这不是必需的!在我的情况下,最后chuck是4字节(33404/240 + 4)。我添加crc它将是5字节!
如果我错了,请纠正我。
Br,
Govind
谢谢!一切都很好,OTA正在工作!
br,
Govind
嗨ggotta,
很高兴你成了它,谢谢你的迹象。
由于MT_dialog