您好!
我使用 CAN RAM 存储某些数据以承受 TCM RAM PBIST&Init... 当我有少量 (8字节)的数据要存储时、CAN RAM 运行良好、然后在测试和广泛阅读数据表和 TRM 后、我发现外设 RAM 的使用并不重要、因为它最初看起来基于数据表...
看起来也不可能使用 TCM RAM、即使与链接器映射一起使用也是如此、因为 sl_Init_Memory()对于整个 TCM RAM 只有1个参数描述符(RAMTYPE_RAM)。 PBIST 已经将 RAM 拆分为半个 PBIST_RAMGROUP_06_ESRAM1和 PBIST_RAMGROUP_21_ESRAM5、所以 PBISTIN 应该可执行、但不是初始化。
因此、不能使用 ESRAM1中的链接器保留空间来正常保存要备份的结构、然后手动将其复制到 ESRAM5、然后为 ESRAM1执行 PBIST 和 memoryinit、并将备份数据复制回 ESRAM1、然后生成 PBIST 和 init ESRAM5
对于与 CAN、ADC 和 N2HET 相关的外设 RAM、此解释是否正确(只检查了其中的几个 RAM)?
CAN3:0xFF1A_0000 - 0xFF1B_FFFF、实际大小为2KB (如果未实现地址则回绕)
这意味着您需要从 TRM 中了解该2KB 块的实施量以及实施方式
- TRM 24.4.4:看起来每个报文对象(0x20大小=8*32位)只能写入前4个32位块,偏移量0x10也允许写入 lsb 字节,其余的保留量更多或更少
因此、如果不从0x10偏移量中计算 lsb 字节、一个消息对象可以"轻松"存储16字节(4x32位)。
-可以有64个消息对象,总存储空间为64*16bytes=1024,并且在写入和读取时必须跳过其它16字节区域
我假设在 RDA 模式下,TRM 24.5.2提及消息对象64 (地址0x0000)没有意义,而且 RAM 的一部分可以自由使用....
TRM 24.5.4的意思是" CPU 一次只能访问一个字行。"、看起来可以一次写入32位、就像这样
sl_canREG3->CTL = 0x00000481U;//禁用奇偶校验,测试模式,初始化模式, */
SL_CANREG3->TEST = 0x00000200U;/*启用 RAM 直接访问模式*/
#define canRAM3_PTR (volatile UINT32 *) 0xFF1A0000U
*(canRAM3_PTR+0)= 0xAABBCCDD;
此外、看起来也可以逐字节使用8位指针进行写入
#define canRAM3_PTR_8位((volatile uint8 *) 0xFF1A0000U)
*(canRAM3_PTR_8bit+0)= 0x11;
*(canRAM3_PTR_8bit+1)= 0x22;
*(canRAM3_PTR_8bit+2)= 0x33;
*(canRAM3_PTR_8bit+3)= 0x44;
*(canRAM3_PTR_8bit+4)= 0x55;
*(canRAM3_PTR_8bit+5)= 0x66;
*(canRAM3_PTR_8bit+6)= 0x77;
ADC2:0xFF3A_0000 - 0xFF3B_FFFF、实际大小为8KB (如果未实现地址则回绕)
这意味着您需要从 TRM 中了解该2KB 块的实施量以及实施方式
-看起来像64个信道=64*32位地址,每个32位数据段中只有低16位可以写入,高16位始终为0
-总数据存储64*2bytes=128字节(如果使用16位数据打包)和64byte (如果只写入 lsb 字节)。
TRM 20.9.2:"在此测试模式下、只允许对 ADC 结果 RAM 进行32位读取和写入。"
-这会阻止按字节写入字节
N2HET:然而、我认为 N2HET 至少是"完全连续 ram"、但看起来它也不是、并且也有一些访问限制
TRM 21.2.2.1:只允许32位写入、每4个地址被保留、不应访问
由于需要深入了解每个外设 RAM 的属性、我认为 CAN RAM 相当易于使用、可以存储大量数据、只需为您想要存储的创建一个结构、然后手动存储即可 (几乎像 memcpy())字节通过使用8位指针和存储16个字节将十个目标指针增加16以跳过该"消息对象的保留区域"并重复、直到数据用完。 通过使用相同的8位指针、从 CAN RAM 恢复数据应该同样简单。 唯一的限制是实现的区域、这意味着1024字节、如果存储了更多的数据并且数据的开始被过度写入、这就相当大。
——这是正确的,当 CTL 寄存器中的 INIT MODE 位置位时,不需要等待什么?
-由于这是与安全相关的数据、因此应计算来自数据的 CRC 并将其添加到实际数据的末尾、或者至少在 CAN RAM 中使用奇偶校验(但是如果不是用8位指针写入完整的32位块、它是否需要 CAN RAM 的内存初始化)?
是否有更多更简单的外设 RAM 用于备份 RM44和 RM48系列中的数据? 没有看过 VIMRAM、因为在调试器复位的情况下、至少 FIQ 可能会通过、因此不想损坏矢量...