神农鼎 发表于 2025-7-4 18:59:26

QSPI, DMA-P2P, 同时送到了XDATA的问题 | 可以软件绕开的问题

QSPI, DMA-P2P, 同时送到了XDATA的问题 | 可以软件绕开的问题

目前 AI8051U, DMA-P2P, 发现下面问题,
只发现,QSPI的 DMA-P2P有此问题,
幸好可以软件绕开的问题


神农鼎 发表于 2025-7-4 19:01:46



https://www.stcaimcu.com/data/download/Datasheet/AI8051U.pdf





C_wolf 发表于 2025-7-5 17:36:53

请问是要注意修改俩个地方吗?

以程序包的72.4为例

1. DMA_AMT_LEN 要小于32K

#define IMG_SIZE            (320UL * 240 * 2)
#define DMA_AMT_LEN         (12800UL)
#define DMA_CNT             (IMG_SIZE / DMA_AMT_LEN)

2. 在void QSPI2TFT_Start()里,设置 DMA_QSPI_RXAH 和 DMA_QSPI_RXAL

      DMA_P2P_CR1 = 0x87;               //P2P_SRC_QSPIRX(0x80) | P2P_DEST_LCMTX(0x07);
      DMA_QSPI_CFG = 0xa0;                //使能DMA读取操作
      DMA_QSPI_STA = 0x00;                //清除DMA状态
      DMA_QSPI_AMT = (DMA_AMT_LEN-1);   //设置DMA数据长度
      DMA_QSPI_AMTH = (DMA_AMT_LEN-1) >> 8;
      //////////////////////
      DMA_QSPI_RXAH = 0x80;      //设置 DMA 缓冲区起始地址
      DMA_QSPI_RXAL = 0x00;
      //////////////////////
      DMA_LCM_CR = 0xa0;
      DMA_QSPI_CR = 0xa1;               //启动DMA并触发QSPI读操作

      fLoading = 1;
}




这样改动程序,就能避免XDATA被修改吗?我这面测试的还是有问题。

请各位大侠赐教,希望官方给个例程。





C_wolf 发表于 2025-7-5 20:14:57

DMA-P2P刷一张背景图,在图上显示QQ图标。

这个是程序,大神给看一下。

ercircle 发表于 2025-7-5 20:52:39

C_wolf 发表于 2025-7-5 20:14
DMAP2P刷一张背景图,在图上显示QQ图标。

这个是程序,大神给看一下。
做了个实验,char xdata str _at_ 0;

0x8000 + (30UL*1024UL) 会全乱码

0x8005 + (30UL*1024UL)AIS01234擄擄刚好跳过了前五个

多加2K但是-4错位:
0x8005 + (32UL*1024UL - 4)AIS?234聪聪可以看到循坏覆盖过来,01乱码了



大概是这样的:xdata有效区+QSPI传输长度总长不能超过32K,起始地址无论放在哪都是取余32K。

ercircle 发表于 2025-7-5 21:09:59




C_wolf 发表于 2025-7-5 21:24:01

ercircle 发表于 2025-7-5 21:09


那就是说xdata要给DMA预留空间,不能按32K来使用?

我那程序中
#define DMA_AMT_LEN         (12800UL)

u8 xdata QQPic_load _at_ 0x10;

这也没超啊?

ercircle 发表于 2025-7-5 21:28:14

C_wolf 发表于 2025-7-5 21:24
那就是说xdata要给DMA预留空间,不能按32K来使用?

我那程序中


0x8000相当于0,

DMA_AMT_LEN         (12800UL)

xdata QQPic_load _at_ 0x10; 在 0~12.8K范围内,将这两空间错开试下

C_wolf 发表于 2025-7-5 22:06:53

ercircle 发表于 2025-7-5 21:28
0x8000相当于0,

DMA_AMT_LEN         (12800UL)


AI8051实验箱V1.2 测试程序



/**********************************************
此程序中
DMA_AMT_LEN = 12800 (DMA_QSPI_RXA设置为0x8000,相当于xdata的地址为 0)
xdata QQPic_load _at_ 12800 (地址为 0+12800)
xdata QQPic_xdata_at_ 16000(地址为 12800+3200)

xdata变量地址 要 避免 与 DMA数据长度重叠,根据具体的需求自行调整吧
本来RAM就不大,还被占用了,希望改进
**********************************************/


感谢大佬的指点{:4_196:},看看是这个意思吗。

给有需要的朋友来个参考例程。

C_wolf 发表于 2025-7-5 22:13:40

ercircle 发表于 2025-7-5 21:28
0x8000相当于0,

DMA_AMT_LEN         (12800UL)


再问一下大佬,这个是不是也会影响USBCDC的xdata啊

00018CH   00FFFFH   00FE74H   ---    ---      **GAP**
010000H   0101FFH   000200H   BYTE   INSEG    XDATA          ?XD?USBCDC
010200H   0102BFH   0000C0H   BYTE   INSEG    XDATA          ?XD?USB
0102C0H   0131FFH   002F40H   ---    ---      **GAP**
013200H   013E7FH   000C80H   BYTE   OFFS..   XDATA          ?XD?OF_3200_?2?MAIN
013E80H   014AFFH   000C80H   BYTE   OFFS..   XDATA          ?XD?OF_3E80_?1?MAIN
页: [1] 2
查看完整版本: QSPI, DMA-P2P, 同时送到了XDATA的问题 | 可以软件绕开的问题