天狼八部
天狼八部
This guy hasn't written anything yet

注册于 1 year ago

回答
3
文章
0
关注者
0

HAL_SPI_TransmitReceive_DMA(spi_handle, (uint8_t *)dma_32_buf, (uint8_t *)dma_32_buf, send_length);

在开始 DMA 传输的函数里设置的。

最终搞定了这个问题,具体方法如下:
drv_spi.c 的 spixfer 函数,添加如下代码。
第一部分是动态分配一段CacheLine对齐的内存,采用的策略是先分配比 send_length 大,且对齐之后也能放下数据的内存。之后再取对齐地址进行使用。
之后复制发送内容到分配的内存,并刷新缓存。
注意分配的内存一定不能在 DTCM。
之后执行 HAL_SPI_TransmitReceive_DMA 函数,必须是这个函数,后面的单独 DMA 发送和接收的函数不行。 具体原因不清楚。
image.png

第二部分是复制接收数据到接收缓存,且释放动态内存。
注意这部分必须放在 DMA 传输完成之后,即上面的 while 循环之后。
image.png

另外要注意动态分配的内存区域对应的内存策略必须是 可缓冲 且 可缓存。其他情况调试了不能通过,具体原因不清楚。

最终确定了问题。
1、要开启 ICache,不然在莫名其妙的地方就会有代码执行超慢的问题。
2、要开启并设置好 MPU,不然访问某些硬件外设时会有异常。

跳转函数改成这样,可以了。。
之前的我也不清楚是什么原因,全部不要了。
QQ图片20200506104047.png

UUUX_7686 发表于 2020-4-23 16:30
components/libc/compilers/newlib 看下代码


:handshake 多谢

UUUX_7686 发表于 2020-4-22 14:18
支持newlib的话,堆空间由RTT管理,即使调用malloc,最终调用的还是rt_malloc,new当然也是如此了。 ...


终于有大佬回复了,谢谢:D

但是newlib是什么,如何使用?请大佬赐教:D

aozima 发表于 2020-1-8 16:06
您按附件这样更新下驱动应该会有好转。


更新之后 DHCP 不会卡死了。谢谢。

但是有其他问题:
上电初始化失败,或者初始化成功了但一段时间后程序卡死。
示波器看了下,是INT引脚不停地有脉冲信号,然后单片机一直在中断函数中处理。

一开始是正常的,突然就会出现这个问题,并且一旦这个问题出现了,那么断电重启都没用,WIFI模块就不能用了。除非换一个模块就好了,但过段时间这个问题又会出现。

这里还在查找原因。

国际哥 发表于 2020-3-3 16:29
最新的007软件包已经修复了这个问题,楼主可以更新试一下。


更新之后 DHCP 不会卡死了。谢谢。

但是有其他问题:
上电初始化失败,或者初始化成功了但一段时间后程序卡死。
示波器看了下,是INT引脚不停地有脉冲信号,然后单片机一直在中断函数中处理。

一开始是正常的,突然就会出现这个问题,并且一旦这个问题出现了,那么断电重启都没用,WIFI模块就不能用了。除非换一个模块就好了,但过段时间这个问题又会出现。

这里还在查找原因。

aozima 发表于 2020-1-12 07:30
要是我的话,会先用默认硬件配置,把FS的HOST验证下功能,再进行一些配置和修改。
因为默认的功能一般都可 ...


重新画了硬件板,把Host放到了 USB FS,Device放到了 USB HS,配置时在USB_DEVICE 中定义宏 BSP_USBD_TYPE_HS。两个都可以正常使用。。

如果USB Host软件包也可以设置是使用 FS 还是 HS,那就更加灵活了。不然开始不注意很容易让硬件采坑,导致主机功能实现不了。

aozima 发表于 2020-1-12 07:30
要是我的话,会先用默认硬件配置,把FS的HOST验证下功能,再进行一些配置和修改。
因为默认的功能一般都可 ...


项目比较紧急,并且从机功能比主机功能更常用,所以暂时先没时间做这个实验。
但我看了从机配置,可以配HS或FS接口。
所以相对更简单的办法就是下一版硬件直接将主从机的端口互换一下。先完成项目再说。{:3_44:}

aozima 发表于 2020-1-8 16:06
您按附件这样更新下驱动应该会有好转。


你好,用你发的文件后,有同样的问题。。连接到WIFI网络,显示成功,过一会就会出现DHCP错误。
QQ图片20200108231914.png


回到
顶部

发布
问题

投诉
建议