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.
工具与软件:
a)在 Fapi_issueProgrammingCommand ()中、如果 Fapi_Auto EccGeneration 是在 oMode 中指定的、我们是否需要指定 指向 ECC 缓冲区地址的 pu8EccBuffer [IN]指针、还是应该为0?
例如、对于以下代码、我们是否需要指定 ECC 地址
(uint8_t *) 0xF047C000?
uint8_t u8_dummy_buff[8]={0xA2、0xB4、0x63、0xD8、0x9A、 0xBC、0xDE、0xEF};
u32_fapi_res = Fapi_issueProgrammingCommand ((uint32_t *) 0x003E0000、
&u8_dummy_buff[0]、
8、
(uint8_t *) 0xF047C000、
0、
Fapi_Auto E.ccGeneration);
b)我无法理解 SPN563A 中表7-1中指定的 ECC 编码、其中提到了 ADDR_MSW_LSW? 这些地址 ADDR_MSW_LSW 是否表示 闪存、因为闪存的存储器映射 范围为0x00000000至0x3FFFFF、但 ADDR_MSW_LSW 中的地址似乎有所不同?
c)在 a)的示例中、我不清楚如何 使用 SPN563A 中的表7-1针对 u8_dummy_buff 中的数据计算 ECC? 请解释一下在此示例中、它将如何使用地址和数据位计算 ECC 位?
尊敬的 Veena:
我对延迟答复表示歉意。
a)in Fapi_issueProgrammingCommand ()中、如果 EccGeneration 是在 oMode 中指定的、我们是否需要指定指向 Fapi_Auto 缓冲区地址的 pu8EccBuffer [IN]指针、还是应该为0?[/QUOT]对于 ECCccGeneration 、会自动计算输入数据的 Fapi_Auto 值、并将其编程到相应的 ECC 部分中。 在这种情况下、我们不需要提供 ECC 缓冲区。
是的、它应该为零。
下面是示例代码:
[quote userid="442323" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1450343/tms570lc4357-fapi_issueprogrammingcommand-and-ecc-encoding ">b)我无法理解 SPN563A 中表7-1中指定的 ECC 编码、其中提到了 ADDR_MSW_LSW? 这些地址 ADDR_MSW_LSW 是否会 将闪存表示为 0x00000000至0x3FFFFF 范围内的存储器映射、但 ADDR_MSW_LSW 中的地址似乎有所不同?[/QUOT]
确定 ECC 位是通用编码算法。
例如、下面突出显示的 ADDR_MSW_LSW 值表示要计算 ECC 第七位、需要对哪些地址位和数据位进行 XOR 运算。
ADDR_MSW_LSW 中的位1 表示相应的位值应需要为 XOR 才能生成 ECC。
整个算法是内部的、因此无需花费太多时间。
——
谢谢、此致、
Jagadish。
Jagdish、您好!
感谢您的答复。 我需要了解详细信息以进行验证、从而检查是否在正确的位置写入了正确的 ECC。
关于 b)中的问题、我想确定我需要在 a)中的示例中使用哪一行-请您澄清一下该示例、以及如何得出该结果?
对于 ADDR_MSW_LSW 、我们应该使用哪个地址、即编程地址还是 ECC 地址?
尊敬的 Veena:
每次写入都需要使用所有行、我的意思是如果您确认清楚、每行只计算 ECC 的一位。 因此、要为64位数据获取8位 ECC、您需要使用所有行。 ECC 始终仅为64位数据的倍数进行计算。
我为 ECC 验证创建了一个 Excel、请参考一次:
e2e.ti.com/.../ECC_5F00_calculation_5F00_Big_5F00_Endian_5F00_Devices_2800_LC4357_2900_.xlsx
在上面的 Excel 中、我实现了整个编码算法。 例如、您可以看到、对于计算 ECC[0]位、我对 TRM 编码表中提到的所有位执行了异或运算。
在这里您只需要在橙色单元格中输入输入、就会在绿色单元格中输入输出 ECC。
例如、如上图所示、如果我在0x21FFF0处写入数据0xEEFF0011AABBCCDD、则会在相应的 ECC 位置获得 ECC 值为0x2E。
我在实际中也测试了这一点:
您可以在上面的图片0xEEFF0011AABBCCDD 位于0x21FFF0处、并在结果控制器中将0x2E 写入相应的 ECC 存储器位置。
——
谢谢、此致、
Jagadish。
Jagdish、您好!
a)感谢您提供电子表格。 我实施并测试了几个场景、并使用您发送的电子表格进行了验证。 大多数情况下都可行、但 我发现、在一种情况下、闪存中报告的 ECC 与电子表格中计算的 ECC 不匹配。 编程的闪存地址为0x0003E0000、数据为:
AABBCCDD | EEFF0016 |
您发送的电子表格将 ECC 给出为93、但 0xF047C000中的 ECC 为12。 请在结束时尝试此场景并检查是否出现相同问题?
尊敬的 Veena:
我休息了几天,没有机会解决这个问题。
您是否仍然受困于此问题? 如果需要、我将创建一个示例、从而在结束时对其进行验证
——
谢谢、此致、
Jagadish。
Jagdish、您好!
是的、我还在等待这个问题的答案。 您最后能否验证您在存储器浏览器中看到的 ECC 是什么。 谢谢。
尊敬的 Veena:
我测试了此条件、并且仅获得了正确结果。
我怀疑对数据的解释可能是错误的、我们了解存储器中存储的数据的方式造成了这个问题。
因此、我建议您以32位 TI 样式保存数据、并查看数据:
如果我们像这样保持、那么如上面的突出显示部分所示、LSW 将存储在地址0x3E0000、MSW 将存储在地址0x3E0004。 相应的 ECC 值为0x93。
我在上面的 MSW 和 LSW 输入到 Excel 中、并且 ECC 相同、为0x93:
您能尝试以同样的方式在您的终端验证一次吗?
——
谢谢、此致、
Jagadish。
Jagdish、您好!
感谢您为我提供帮助。 我交换了 MSW 和 LSW 的字节。 这对我很有效、纠正了 MSW/LSW。