This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,
此查询包含引导加载程序和 F021_API_CortexR4_be_V3D16.lib 的用法 ,如何 在 RAM 中动态加载 F021_API_CortexR4_be_V3D16.lib,并且在加电序列期间不执行。
擦除闪存 组1的扇区15至27时没有错误。
引导加载程序位于闪存 组0的扇区0和扇区7处、
在擦除扇区8-15期间,闪存 组0中的这些扇区中没有源代码。 当擦除 组0的扇区时--系统复位发生在以下 FAPI 指令上。
STATUS=Fapi_setActiveFlashBank (((Fapi_FlashBankType) 0);
我已将 TMS570LS3137设置为安全模式(启用所有安全功能),并执行所有安全库启动代码。
此外、如果必须将闪存 API 复制到 RAM 并为组0执行擦除和写入操作、请告诉我。
此外,请帮助我处理源代码如何 在运行时将闪存 API 库加载到 RAM 中(.test,.const),因为如果我们在最初时将闪存 API 库加载到 RAM 中,SRAM 测试将失败,如.cmd 文件中所示。
我想在 SRAM 测试完成后的运行时执行以下复制过程。
load = flash_API、run = SRAM、load_start (api_load)、run_start (api_run)、size (api_size)
在擦除闪存 组0的扇区8至15时、是否应该注意任何勘误表
下图显示了复位发生前闪存包装程序的寄存器
您好,QJ Wang 先生,
1.感谢花时间详细解释擦除组0的过程。 如果 只有使用的扇区被锁定,是否有可能不会锁定整个闪存组0。
2.如果我将闪存 API 加载到 RAM 中、我正在实施的安全应用程序具有 SRAM_ResetTest、并且代码始终挂起
/*等待 PBIST 完成 PBIST 和 STC ROM */
while ((systemREG1->MSTCGSTAT & 0x1U)== 0U){};
3.是否有解决 SRAM 测试失败的方法。
4.我了解从 RAM 运行闪存 API 的要求,并遵循引导加载程序示例,但我没有在安全应用程序中使用 RAM 加载和 RAM 执行的灵活性。
您好,QJ Wang 先生,
1.感谢花时间详细解释擦除组0的过程。 如果 只有使用的扇区被锁定,是否有可能不会锁定整个闪存组0。
2.如果我将闪存 API 加载到 RAM 中、我正在实施的安全应用程序具有 SRAM_ResetTest、并且代码始终挂起
/*等待 PBIST 完成 PBIST 和 STC ROM */
while ((systemREG1->MSTCGSTAT & 0x1U)== 0U){};
3.是否有解决 SRAM 测试失败的方法。
4.我了解从 RAM 运行闪存 API 的要求,并遵循引导加载程序示例,但我没有在安全应用程序中使用 RAM 加载和 RAM 执行的灵活性。
您好,Qj Wang 先生,
闪存存储器映射如下(这与建议的 0x00000000到0x00020000引导加载程序不同):
0x00000000到0x000A0000 --具有严格 SIL2认证的安全关键型应用软件(我正在使用引导加载程序擦除和重新写入这些位置)
0x000C0000到0x000E0000 --引导装载程序软件不安全(我正在使用从这个位置运行的引导装载程序来擦除和写入上面提到的应用程序)
我正在使用的安全关键型应用源代码具有严格 的 SIL2规则,因此它启用了所有的异常,并将专用的闪存地址0x00000000到0x000A0000映射为 SIL2安全关键型软件位置, 我不允许将其重新定位到这些闪存位置的不同地址(我使用的是引导加载程序,我将重写应用程序)。
如果我将 SIL2认证源代码从0x00000020移动到0x00040000开始,则会发生_undef 异常。 ;重置中止堆栈,因为此处理程序不可重入,在某些情况下由 longjmp 留下
目前,位于0x000C0000的引导加载程序项目具有 Debug Build,无法将 IVT 地址0x00000000重新写入0x00000020 ,它适用于所有其它0x00000020到0x00300000 扇区0,通过扇区27重新写入 我知道.intvecs 被映射到 地址0x00000000到0x00000020 这是否意味着永远不会擦除.intvecs? ,是否有权变措施,因为我们的项目需要此解决方案。
感谢您为解决所有问题(扇区0除外)提供了广泛的解释。 我现在已禁用 SRAM PBIST 测试和闪存 PBIST 测试。
我现在已经将(.text、.const of Flash API Library)的受控副本执行到 RAM 中,并设置 FBPROT 的 PROTL1DIS 位 (实现为 Flash_register.FBPROT=1;)。
闪存 API:
{
--library= F021_API_CortexR4_be_V3D16.lib <实用程序.GetNumberOfSecvers.obj >(.text:Fapi_getNumberOfBankSecors)
--library= F021_API_CortexR4_be_V3D16.lib < FlashStateMachine.InitializeFlashBanks.obj >(.text:Fapi_initializeFlashBanks)
--library= F021_API_CortexR4_be_V3D16.lib < FlashStateMachine.SetActiveBank.obj >(.text:Fapi_setActiveFlashBank)
--library= F021_API_CortexR4_be_V3D16.lib < Program.obj >(.text:Fapi_issueProgrammingCommand)
--library= F021_API_CortexR4_be_V3D16.lib < FlashStateMachine.EnableMainSecvs.obj >(.text:Fapi_enableMainBankSecors)
--library= F021_API_CortexR4_be_V3D16.lib < Read.Common.obj >(.text:_Fapi_MargenterinMode)
--library= F021_API_CortexR4_be_V3D16.lib < Read.MarginByByByByByByByByByByByByByByByByByByByByByByByByByByByByByte >(.text:Fapi_doMarginReadByByByByByByBy
--library= F021_API_CortexR4_be_V3D16.lib < FlashStateMachine.IssueFsmCommand.obj >(.text:_Fapi_issueFsmCommand)
--library= F021_API_CortexR4_be_V3D16.lib <实用程序.CalculateFletcher.obj >(.text:Fapi_calculateFletcherChecksum)
--library= F021_API_CortexR4_be_V3D16.lib < ASYNC.WithAddress.obj >(.text:Fapi_issue193CommandWithAddress)
--library= F021_API_CortexR4_be_V3D16.lib < Utilities.WaitDelay.obj >(.text:Fapi_waitDelay)
--library= F021_API_CortexR4_be_V3D16.lib < Read.Common.obj >(.text:_Fapi_exitMarginMode)
--library= F021_API_CortexR4_be_V3D16.lib < read.FlushPipeline.obj >(.text:fapi_flushPipeline)
--library= F021_API_CortexR4_be_V3D16.lib < FlashStateMachine.InitializeFlashBanks.obj >(.text:_Fapi_divedUnsignedLong)
--library= F021_API_CortexR4_be_V3D16.lib <实用程序.CalculateEcc.obj >(.text:Fapi_calculateEcc)
--library= F021_API_CortexR4_be_V3D16.lib < FlashStateMachine.ScaleFclk.obj >(.text:_scaleEEFclk)
--library= F021_API_CortexR4_be_V3D16.lib < FlashStateMachine.ScaleFclk.obj >(.text:_scaleMainFclk)
--library= F021_API_CortexR4_be_V3D16.lib < read.wdService.obj >(.text:_Fapi_checkWdService)
--library= F021_API_CortexR4_be_V3D16.lib < BlankCheck.ByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByBy
--library= F021_API_CortexR4_be_V3D16.lib < FlashStateMachine.EnableEpromSectics.obj >(.text:Fapi_enableEpromBankSectors)
--library= F021_API_CortexR4_be_V3D16.lib < Read.LoopByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByte >(.text:_Fapi_loopRegionForValueByByByByBy
--library= F021_API_CortexR4_be_V3D16.lib < FlashStateMachine.EnableEpromSecvs.obj >(.text:_Fapi_EnableSecors)
boot_flash.obj (.bss、.data、.text、.const)
boot_erase.obj (.bss、.data、.text、.const)
boot_ca_Upd.obj (.bss、.data、.text、.const)
BOOT_EMIF_Write_Data.obj (.bss、.data、.text、.const)
}load = flash_API、run = SRAM、load_start (unsafe _load_start)、run_start (unsafe _run_start)、size (unsafe _run_size)
;------------------------------------------------------------------
;
;将闪存 API 从闪存复制到 SRAM。
;
;
.def _Boot_copyAPI 2RAM_
asmfunc
Boot_API copy2RAM_
.ref unsafe load_start
FLASH_LOAD .word unsafe 加载启动
.ref unsafe _run_start
flash_run .word unsafe _run_start
.ref unsafe _run_size
flash_size .word unsafe _run_size
LDR r0、FLASH_LOAD
LDR R1、FLASH_RUN
LDR R2、FLASH_SIZE
添加 R2、R1、R2
COPY_Loop1:
LDR R3、[r0]、#4
STR R3、[R1]、#4
CMP R1、R2
BLT COPY_LOOP1
BX LR
endasmfunc
您好 Chantren、
当一个异常发生时、处理器必须执行与该异常相对应的处理程序代码。 存储器中存储处理程序的位置称为异常向量。 在 ARM Cortex-R4/R5中、异常向量存储在一个被称为异常向量表的表中。 该表包含将内核定向到完整异常处理程序的分支指令。
ARM Cortex-R4/5上异常向量的基地址为0x00000000、不可编程。
这是异常向量(ARM Cortex-R4 TRM)的定义:
EA0014AB EA03FFFE EA03FFFE EA03FFFE EA03FFFE EA03FFFE EAFFFFE E51FF1B0 E51FF1B0
第一个字是_c_int00 () -- b _c_int00的分支指令
2.第2个字~第5个字是 分支到自身的指令
3.保留第6个
最后两个用于 IRQ 和 FIQ
您好,QJ Wang 先生,
感谢您花时间详细解释前8个词。
以下是我的理解。
操作码 EA 代表分支
EA --分支指令,后跟从当前地址分支的3个字节的相对地址 ( 以32位倍数表示,因为 TMS570LS3137是32位控制器)。
现在我了解到 EA0014AB 是指从当前地址到 如此多的字(32位或4字节)的分支相对地址,因为程序计数器应该在0x000052AC 上加载_c_int00。
入口点符号:"_c_int00"地址:000052ac
对于 EA03FFFE EA03FFFE EA03FFFE EA03FFFE EA03FFFE EA03FFFE EA03FFFE EA03FFFE EAAFFFFE、我了解当我们分解为操作码时、它如下所示
此处为 BAL;分支汇编到0xEAFFFFFE (注意 PC 偏移的影响)。
再次感谢,