Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

问题:基本官方引導老撾人的 OTA 面建議議君君君,我需要本己己己通通通則信实现现实制別,我需要君君君君?有哪哪些需要意注注?

解方:

无论是基官方引導老闆的 OTA 还是基房子协議議議成 OTA, 都要要要要实下的几个个基现现:

1、内部閃存分区(引导程序区、APP 与区數據区)

2、内部閃光的擦写

3、應用程式应用程序文分离离

4、启动区程序转转到应用程序区 API 实现

一、内快閃存部分区(引导程序区、APP 与区數據)

1、PSoC™ 4 的地址地圖如下:

DaveLong_0-1693452478711.png  

DaveLong_1-1693452504723.png

其中中内閃光燈的始地方方面 0x1FFF 處,际实大可对芯片,数据实可应芯片的数数据据据据即手获取。

所以我需要要要根 OTA 的架构构构內閃光,下面是常分分区区:

DaveLong_0-1693461450628.png

OTA 不同区的需即即即行位划分,不作套閃光应的大小一样,体可可套一,体可可对参对,数手册册。

注意:因應 APP 工為需要可引導的,主键整合 BOOT 和 APP 的工固,对分分工工作果果,对分工工工作室,flash 分工工程外,用戶戶口。

二、内閃光的擦写

1、芯片內部部有有一個 使用者閃,没資料有区,flash 不存在該区区,以及是在的中的身身,閃光燈的,行概概,没有人和面是面面256其他,小作作為 CY8C4100S

 2、閃光燈的擦除和编调用的是一个函数接口,没独立的擦和编口接。接口函数下如:

uint32 CYSsFlashWrirow(一個 32 行,常量 8 行數據 [])

参数说明:

紅色:行,总数 = 閃光大小行/大小小

行資料 []:需要要编编的意,组大必须等閃光

返回值:

/** 成功完成。 */

#define 循環 _ 閃光成功 (0X00U)

/** 指定的閃存行地址無效. 提供的資料列 ID 或位元組位址位於可用記憶體之外。 */

#define 循環 _ 閃存 _ 無效 _ 地址 (0X04u)

/** 指定的閃存行受到保護。 */

#define 循環 _ 閃存 _ 保護 (0X05u)

/** 恢復完成。 所有非阻塞呼叫都已完成。 簡歷/中止功能不能被調用,直到下一個非阻塞。 */

#define 循環 _ 快閃履歷 _ 完成 (0X07U)

/**\ 簡短的待繼續。 非阻塞已啟動,必須通過調用簡歷 API 來完成,然後才能調用任何其他函數。 */

#define 循環 _ 閃光 _ 暫存 _ 恢復 (0X08U)

/** 系統調用仍在進行中。 簡歷或非阻塞仍在進行中。 SPC ISR 必須在開火前

嘗試下一個恢復。 */

#define 循環 _ 閃存 _ 呼叫 _ 進行中 (0X09U)

/** 無效的閃光時鐘。 使用 CY_IP_SRSSLT 的產品必須先將國際海事組織設定為 24MHz,而且在寫入/抹除操作之前,必須將高頻時脈來源設定為國際海事組織時脈。 */

#define 循環 _ 閃光 _ 無效時鐘 (0X12U)

3、閃光擦與編一為行需要 9.4ms 左,并且阻塞果作為,中部断断其他人,可以是最後一部分狗復位导致升失败。

三、應用程式应用程序文分离离

BOOT 和 APP 可可可过过可启动装置的,四合成个个可烧一烧,文文文件,对应应口口的可取根据面,面应应口口可根根据面,面取原:

1、拷贝需要要生成BIN件的十六進制文對应的BIN文里夹:

DaveLong_1-1693462870802.png

2、修改RUN.bat文件的內:十六進制源文名、起房和长度,运运运家对应的BIN

DaveLong_2-1693462910953.png

四、启动区区转区区的 API

無效(* 閃光跳躍)(無效);

無效閃存啟動跳轉(無效地址)

{

最新版本;

英特 32 噸 * PT;

SCB-> 保留 0 = 地址;

//< set User code interrupt vector tab address SCB->VTOR

pt = (((*) (地址));

驅逐出售 = * PT;

__ 設定 _ MSP (驅動程式);

PT = (((*) (加 4));

驅逐出售 = * PT;

閃存 _ 跳躍 =(無效(*)(無效))(驅逐);

閃光 _ 跳躍();

}

無效 MG_ 跳轉應用程序(無效)

{

U32 跳轉地址;

U32 跳轉位址 = 使用者應用程式執行位址;

閃存啟動跳轉(U32 跳轉地址);

}

注意:如果工BOOT工程使中断,跳在转之需要前使所有有断

0 回應