ART 编号:TMS570LS3137
您好,
在我的电路板上或闪存器件上均未连接、如 TMS570LS31x/21x TRM 中的图17.8b 所示、EMIF 寄存器设置为:
实际上,我看到的是我们#的两篇文章,而不是一篇。
例如、当我在外部异步存储器区域(0x60000000)的地址"0006"处写入一个简单的16位字时、
TMS 首先使用 W#在地址"0005"处写入另一个16位字、然后使用另一个 W#在地址"0006"处写入好的16位字。
因此、TMS 似乎会自动在正常字旁边的地址写入另一个字、然后在良好地址正确写入。
您是否认为在好的地址旁边的这个额外写入可能是由 HalCoGen 中的一个其它设置引起的? 还是 Code Composer Studio 中的设置?
生成到 NOR 闪存 A1和 NOR 闪存 A0 (TMS570LS3137的 EMIF_B1和 EMIF_A0线路)的地址信号 不正确。
EMIF A0至 A15 (地址线 EMIF Ba1至 EMIF A14)的示波器波形图,我发现 与 TMS570LS3137上的技术规格有偏差
A1和 A0上生成的地址信号不正确。
以下示波器图显示了为3个低半字节发送相同值以及读取 A0和 A1的执行情况,该值应遵循 A4和 A5,且应遵循 A8& A9。
附加了我用于执行测试的测试项目,并在主 系统 REG1->GPREG1 |= 0x80000000中添加了对行的勘误修复;
找到错误 的 NOR 闪存 地址 A0和 A1切换 * ((uint16_t *) base_addr + 0x000C)= 0x00AA; 预期为1100二进制文件
A2为1
A1为1
A0 是1错误的位设置
Ba1为0
找到错误 NOR 闪存 地址 A0和 A1 切换 * ((uint16_t *) base_addr + 0x0005)= 0x00AA 时出错; 预期为0101二进制
A2为0
A1为1
A0是1错误的位设置
Ba1为0错误位复位
针对 *((uint16_t *) base_addr + 0x000A)= 0x00AA 正常工作;
A2为1
A1为0
A0为1
Ba1为0
针对 *((uint16_t *) base_addr + 0x000F)= 0x00AA 正常工作;
A2为1
A1为0
A0为1
Ba1为0
在 HALCOGEN PINMUX 上没有组装 L17 EMIF_NCS2 。 K17 EMIF_nCS3和 M17 EMIF_nCS4被组装。
HalCoGen 是否应该 为 连接到 NOR 闪存的 NOR EMIF addr 信号生成正确的代码?
EMIF_BA[1]连接到 NOR 闪存 A[0]、EMIF A[x]连接到存储器 A[x+1]。 如以下原理图所示。
以下主题中提到了类似的问题、但没有解决方案
https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/284785?EMIF-16-bit-async-write-generates-multiple-writes
第二个线程
https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/788623?TMS570LS3137-EMIF-Asynchronous-Timing-unable-to-Write-Read-device-properly
执行了以下建议
请确保正确配置引脚多路复用器。
2.对于存储器接口、EMIF 地址引脚 EMIF_A[0]始终提供32位字地址的最低有效位。 因此、当连接到16位异步器件时、EMIF_BA[1]引脚提供半字的最低有效位。 EMIF_BA[1]应连接到存储器 A[0]引脚。
3.建议先尝试 CE2FFG 寄存器中 Setup、STROBE 和 HOLD 域的最大值、确保设置正常。
最可能的问题是由计时引起的。 EMIF 器件的设置、选通和保持是否有任何特殊要求? 您也可以将 EMIF 时钟降低到16MHz 吗?
正确的做法是、要正确地将数据写入 EMIF 异步存储器、必须使用 MPU 将存储器配置为器件类型或严格排序类型
6)
我还必须添加以下代码行、可能是 用于切换 EMIF 数据行和 EMIF 地址行的 Halcogen 故障。
systemREG1->GPREG1 |= 0x8000000;
DmmREG->PC1 = 1/* DATA[0]*/*!!! 应该是1 << 2!!*/
|(1 << 1)/*数据[1]*//*!!! 应该是1 << 3!!*/
|(1 << 2)/*数据[2]*//*!!! 等等!!!*/
|(1 << 3)/*数据[3]*/
|(1 << 4)/*数据[4]*/
|(1 << 5)/* data[5]*/
|(1 << 6)/* data[6]*/
|(0 << 7)/* data[7]*/
|(0 < 8)/* data[8]*/
|(0 << 9)/* data[9]*/
|(0 < 10)/* data[10]*/
|(1 << 11)/* data[11]*/
|(0 < 12)/*数据[12]*/
|(1 << 13)/* data[13]*/
|(1 << 14)/*数据[14]*/
|(0 < 15)/* data[15]*/
|(0 < 16)/* DMM 同步*
|(1 << 17)/* DMM CLK */
|(1 << 18);// DMM ENA */
7) 7) EMIF、45MHz
8) mpuInit()。
9) 9) EMIF 时钟应< 50MHz。 90MHz 超出有效范围。
10)还设置了 MPU 设置中0x6000_0000存储器区域的"器件模式"。 如果使用正常模式、则一个 nCS 周期中有多个新脉冲。
11) 11)是否可以确保从主例程中实际调用 MPU 初始化函数 mpuInit()? 该初始化不是由 HALCoGen 生成的默认启动序列完成的。
























