器件型号:LAUNCHXL-F28377S
您好! 我正在尝试使用 Uniflash GUI 串行刷写 LAUNCHXL-F28377S 上的 F28377S。 F28377S 是否已添加串行闪存支持? 我在 Uniflash 连接方法下拉菜单中看不到串行选项。 提前感谢。
Russell
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.
器件型号:LAUNCHXL-F28377S
您好! 我正在尝试使用 Uniflash GUI 串行刷写 LAUNCHXL-F28377S 上的 F28377S。 F28377S 是否已添加串行闪存支持? 我在 Uniflash 连接方法下拉菜单中看不到串行选项。 提前感谢。
Russell
我尝试使用 DFU。 我知道调试的含义、我问如何将 LaunchPad 置于调试模式、同时仍将其置于 sci 引导模式、我唯一要连接到 LaunchPad 的连接是 mirco USB。 这将作为 JTAG 调试的通道以及将应用发送到闪存内核的串行线路吗? 请提供 DIP 开关位置以及在仿真器/sci 引导模式下运行 Launch Pad 所需的任何 emuboot 寄存器。 似乎有几个人有完全相同的问题。 请确认此过程是否可行、方法是将其复制到您一侧的硬件上。
Russell
Alex、
请参阅以下内容是否有帮助:
1)您能否搜索"如果 Fapi_issueCommandWithAddress (Fapi_EraseSector、xx)不等待擦除操作完成、我们如何知道擦除操作是否成功?" 闪存 API wiki 中的链接、网址为 processors.wiki.ti.com/.../C2000_Flash_FAQ。
2)还搜索"当闪存 API 无法擦除或编程时、我们可以考虑哪些常见调试提示?"。 它可能有助于调试。
谢谢、此致、
Vamsi
贝洛·萨尔·普雷佐诺
以下是我为您的引导加载程序提供的补丁。
我只需删除 bank1初始值、因为我们要写入 bank0。
它适用于 blinky 程序、但当我尝试下载程序时
这不奏效。
我得到一个程序错误:
正在将 MyProgramm.A00下载到器件...
地址:82000 块大小:1021
地址:80000 块大小:2.
地址:80002 块大小:3235
地址:82400 块大小:7168
地址:84000 块大小:4298
地址:90000 块大小:1418
应用程序加载成功!
已完成等待应用程序下载和引导... 输入和输出已成功刷新
命令成功
错误状态:program_error
错误地址:0x07c88
我的链接器文件不使用 bank1。
您能解释一下为什么我必须管理 bank1。
或者、您能否为引导加载程序提供一个修复程序来管理组。
Alex
从 c68b78dc57557a6ac2c9ef1b58c1f843194798c1 Mon Sep 17 00:00:00 2001 出发地:alexn 日期:2018年7月16日星期一13:59:04 +0200 主题:不是初始银行1。 现在我们不会得到空白错误。 Blinky 工作。 -- F2837xS_sci_flash_kernel.c | 26 ++++++++++++++++ -------- 1个文件已更改、13个插入(+)、13个删除 (-) diff - git a/F2837xS_sci_flash_kernel.c b/F2837xS_sci_flash_kernel.c INDEX 31bc764..ec058d2 100644 - a/F2837xS_sci_flash_kernel.c INDEX 31b_influ.c + u.ec058d2 100644b - a @@ 1237x_inu_inu_inu.c + u.c + 129,37xt_inu_inu.c + u.c + u.c @@ 129,t_inu.c // //初始化闪存。 // - InitFlash_BANK1 (); +/-InitFlash_BANK1 (); InitFlash_BANK0 (); init_Flash_sectors (); @@-157、7 +157、7 @@ void Init_Flash_Sectors (void) { EALLOW; Flash0EccRegs.ecc_enable.bit.enable = 0x0; - Flash1EccRegs.ecc_enable.bit.enable = 0x0; +//Flash1EccRegs.ecc_enable.bit.enable = 0x0; Fapi_StatusType oReturnCheck; oReturnCheck = Fapi_initializeAPI (F021_CPU0_W0_BASE_ADDRESS、150); @@-165、25 +165、25 @@ void Init_Flash_Sectors (void) { Example_Error (oReturnCheck); } - oReturnCheck = Fapi_initializeAPI (F021_CPU0_W1_BASE_ADDRESS、150); - if (oReturnCheck!= Fapi_Status_Success) -{ - Example_Error (oReturnCheck); -} +//oReturnCheck = Fapi_initializeAPI (F021_CPU0_W1_BASE_ADDRESS、150); +// if (oReturnCheck!= Fapi_Status_Success) +//{ +// Example_Error (oReturnCheck); //} oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank0); if (oReturnCheck!= Fapi_Status_Success) { Example_Error (oReturnCheck); } - oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank1); - if (oReturnCheck!= Fapi_Status_Success) -{ - Example_Error (oReturnCheck); -} +//oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank1); +//if (oReturnCheck!= Fapi_Status_Success) +//{ +// Example_Error (oReturnCheck); +//} Flash0EccRegs.ecc_enable.bit.enable = 0xA; - Flash1EccRegs.ecc_enable.bit.enable = 0xA; +//Flash1EccRegs.ecc_enable.bit.enable = 0xA; EDIS ;} -- cgit v0.11.0
Alex、
如果不想擦除/编程/验证 BANK1、则无需为 BANK1调用 Fapi_initiataleAPI ()和 Fapi_setActiveFlashBank()。 如果您没有在链接器命令文件中使用 Bank1为其分配任何代码/数据、那么我同意您也不需要初始化其读取接口-也就是说、您无需为 Bank1调用 InitFlash()。
A)当闪存程序操作针对 Bank0发生故障时、您能否检查闪存泵信号量是否分配给 FMC0?
b)您从程序函数调用中得到的确切错误是什么?
c)失败后、您是否检查了 fmstat? 如果是、fmstat 的值是什么-这将帮助我们进一步调试。
谢谢、此致、
Vamsi
------------------------------------------------------------------
P.S:下面的内容仅适用于 FYI (看起来您已经了解了这些内容)-但只是以防万一。
1) 1)当应用程序想要执行 Bank0擦除/编程/验证操作时、应调用以下函数来初始化 FMC0和 Bank0 (请注意、参数与 Bank0/FMC0相关)。
//
//将泵所有权赋予 FMC0
//
PUMPREQUEST = 0x5A5A0002;
//
//需要此函数来根据系统初始化闪存 API
//频率、然后才能在组0上执行任何其他闪存 API 操作。
//请注意、FMC0寄存器基址作为参数传递
//
oReturnCheck = Fapi_initializeAPI (F021_CPU0_W0_BASE_ADDRESS、FREQ);
if (oReturnCheck!= Fapi_Status_Success)
{
//
//检查闪存 API 文档以了解可能的错误
//
Example_Error (oReturnCheck);
}
//
// Fapi_setActiveFlashBank 函数为设置闪存组0和 FMC0
//将在组0上执行进一步的闪存操作。
//请注意,自 FMC0寄存器以来传递的参数是 Fapi_FlashBank0
//基址被传递到 Fapi_initiatizeAPI ()
//
oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank0);
if (oReturnCheck!= Fapi_Status_Success)
{
//
//检查闪存 API 文档以了解可能的错误
//
Example_Error (oReturnCheck);
}
2) 2)当应用程序想要执行 Bank1擦除/编程/验证操作时、应调用以下函数来初始化 FMC1和 Bank1 (请注意、参数与 Bank1/FMC1相关)。
//
//将泵所有权授予 FMC1
//
PUMPREQUEST = 0x5A5A0001;
//
//需要此函数来根据系统初始化闪存 API
//频率、然后才能在组1上执行任何其他闪存 API 操作。
//请注意、FMC1寄存器基址作为参数传递
//
oReturnCheck = Fapi_initializeAPI (F021_CPU0_W1_BASE_ADDRESS、FREQ);
if (oReturnCheck!= Fapi_Status_Success)
{
//
//检查闪存 API 文档以了解可能的错误
//
Example_Error (oReturnCheck);
}
//
// Fapi_setActiveFlashBank 函数为设置闪存组1和 FMC1
//在银行1上执行进一步的闪存操作。
//请注意、自 FMC1寄存器以来传递的参数是 Fapi_FlashBank1
//基址被传递到 Fapi_initiatizeAPI ()
//
oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank1);
if (oReturnCheck!= Fapi_Status_Success)
{
//
//检查闪存 API 文档以了解可能的错误
//
Example_Error (oReturnCheck);
}
3) 3)请注意:由于 F28377S 中有两个用于单核的 FMC、因此只要目标组发生更改、就必须调用上述函数。 只能有一个组被激活用于擦除/编程/验证操作。 因此、每当应用程序希望为闪存操作切换目标组时、在对该组执行闪存操作之前、应调用相应组的上述函数。 请注意、在调用这些函数之前、应配置闪存等待状态。
4)进入闪存读取接口配置:您可能已经注意到 InitFlash_BANK0 ()和 InitFlash_BANK1 ()函数-这些函数可用于分别初始化 Bank0和 Bank1 (等待状态可根据您的应用频率进行更改)。 应在使用任何闪存 API 函数之前调用这些函数。 无论您要擦除/编程/验证哪一个存储块、都可以执行这两个存储器。
//
//调用闪存初始化以设置闪存等待状态、备用电源模式、ECC 等
//此函数必须驻留在 RAM 中
//
InitFlash_BANK0 ();
InitFlash_BANK1 ();