如题,我在尝试用DMA批量读取Flash数据上传给主机,然后发现读取的数据都是0.
于是printf打印了DMA保存的地址,发现它与我设定的地址不一致(如0x08010000),超过0x10000的部分被噶掉了。
然后查看应用手册,发现usb的DMA只能存储16位地址。
于是,又打印了一下RAM的地址,发现也不是0x20000000为基地址的偏移地址,但是能正常工作。
于是对此产生了疑问,希望能得到解答。
难道只能Flash->RAM->DMA这样操作吗,感觉这样很浪费时间。
如题,我在尝试用DMA批量读取Flash数据上传给主机,然后发现读取的数据都是0.
于是printf打印了DMA保存的地址,发现它与我设定的地址不一致(如0x08010000),超过0x10000的部分被噶掉了。
然后查看应用手册,发现usb的DMA只能存储16位地址。
于是,又打印了一下RAM的地址,发现也不是0x20000000为基地址的偏移地址,但是能正常工作。
于是对此产生了疑问,希望能得到解答。
难道只能Flash->RAM->DMA这样操作吗,感觉这样很浪费时间。
您好,USB部分的DMA默认就是memory到发送缓冲区,因此可以使用外设DMA将FLASH数据搬运到代码中定义的USB发送buffer中,然后在检测到DMA搬运完成标志后触发USB发送即可。
请问有没有这方面的例程可以参考呢?
代码需求是:
外设DMA从Flash搬运不定长度的数据给USB批量上传主机。
这个数据长度可能远大于USB的buffer的空间,也可能只有几个Byte.
我想尽量使用一种通用集成化的函数解决问题。
暂时没有参考代码,您可以先通过2楼提供的思路自行实现,其次需要注意一点flash搬运的数据长度不可超过usb buffer的空间大小,如遇问题可通过邮箱联系(zl@wch.cn)