浦江老师:您好!
和您汇报一下,我把您的程序,改写到SPI 串口TFT ILIst7789 240*240 的屛上
实验环境还是咋们的AI8051U试验箱,现在有点进展,能够浏览图片和播放动画,菜单3,菜单4 也OK
但是也存在问题:
1 图片上有细小亮点,感觉是读取或者传输中有错
2 系统稳定性很差,例如功能1浏览图片,第一次执行本功能正常,退出后没有执行任何操作,接着再一次执行1浏览图片,有时候OK,有时候就黑屏死机,我怀疑就是和
图片上有不规则的细小亮点(感觉P2P过程读或者传有错) 有关
3 根因一:QSPI P2P 会破坏 XRAM 数据(官方已确认)
这是 Ai8051U 已知硬件局限性(摘自论坛帖,2025/7/8 官方回复): "目前测试发现 Ai8051U 的 QSPI 到其他外设的 P2P 方式 DMA 会影响 XRAM 的数据。必须将 QSPI 存储接收数据的 XRAM 起始地址设置到 32KXRAM 的后面部分。" 解释:P2P 名义上"不经过 XRAM",但硬件内部仍然有一块 DMA 缓冲区映射到 XRAM 空间。如果你没显式设置 DMA_QSPI_RXAH/RXAL,它的默认值是 0x8000(对应 XRAM 地址 0),那么从地址 0 开始、长度为 DMA_AMT_LEN 的一片 XRAM 都会被覆盖!
但是我查看了:ACTIVE MEMORY CLASSES OF MODULE:.\Objects\QSPI-TFT_DMA_P2P_ILI7789_UART1(Ai8051U键盘_动画成功)(TFT_7789) BASE START END USED MEMORY CLASS 000000H 000000H 0007FFH 000545H EDATA 000000H 000000H 0007FFH HDATA FF0000H FF0000H FFFFFFH 007021H CODE 000000H FF0000H FFFFFFH 002568H HCONST 000020H.0 000020H.0 00002FH.7 000002H.2 BIT 010000H 010000H 01FFFFH 000600H XDATA FF0000H FF0000H FFFFFFH 000004H CONST 000000H 000000H 00007FH 000008H DATA
解读 .map 文件 关键的几行: BASE START END USED MEMORY CLASS ========================================================== 000000H 000000H 0007FFH 000545H EDATA ← 内部 2K RAM,用了 545H 字节 010000H 010000H 01FFFFH 000600H XDATA ← 内部 32K XRAM,只用了 600H 字节 翻译成大白话: EDATA(0x0000~0x07FF,2K 内部直接寻址 RAM):用了 545H = 1349 字节 XDATA(在 C251 中映射到 0x010000~0x01FFFF,即内部 32K XRAM):只用了 600H = 1536 字节 而 C251 的 XDATA 地址 0x010000~0x01FFFF,对应到内部 XRAM 的物理偏移就是 0x0000~0x7FFF(32K)。 关键结论:你目前没有冲突 ✅ 项目 地址范围 你的 XDATA 变量 0x010000 ~0x0105FF(物理偏移 0x0000~0x05FF) 你设置的 DMA 缓冲区(RXAH=0x50) 物理偏移 0x5000~0x7FFF(如果 DMA 长度 12K) 两者不重叠!所以你现在的不规则亮点不是 DMA 缓冲区覆盖变量导致的。 我把现在的项目文件压缩打包传上来,请浦江老师指教: |