野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8100|回复: 5

IMXRT1052-USB VCP 在 OCRAM 中无法识别

[复制链接]
发表于 2019-9-6 11:16:16 | 显示全部楼层 |阅读模式
为啥原子哥的VCP代码,数据在OCRAM里,可以正常跑,官方的SDK就不行呢???
求助!!!
问题:
在官方的SDK DEMO中 ,分散加载文件里的DATA段都是放在DTCM里,VCP的DEMO是正常可以运行的;
我把m_data_start 地址修改到OCRAM里去,即0x2020_0000里,发现VCP就不能被PC识别到驱动了,经过调试发现,在pc获取设备描述符的时候,1052获取到PC的数据描述符setup请求 usb ehci qh setupBuffer 中的数据变成0x00000000 0x00000000了,而正常放在dtcm里的时候,数据是正常的 0x01000680 0x00400000。很是奇怪啊!!!
疑问:
1、我直接下载原子的VCP代码也是可以用的!他的数据区也是放在OCRAM里!!!,不知道他在其他地方有什么改动没有?
2、感觉和DMA有什么关系一样!猜测如果USB EHCI 的数据是直接通过DMA方式放到 QH里,那么DMA应该是在OCRAM里正常跑而不是DTCM里正常跑啊!现在结果却相反了!
3、在调试串口DMA也发现了类似的问题!!!按道理说DMA的noncache 区域应该放在OCRAM里,IMXRT芯片手册说了,只有OCRAM区域才能被正常被外设访问!!!

回复

使用道具 举报

 楼主| 发表于 2019-9-6 11:17:02 | 显示全部楼层
终于找到原因了!
在野火论坛上的一个帖子给了我提示,谢谢这位哥们儿!!!
我对比了官方SDK和原子哥代码的MPU配置,发现在配置OCRAM区域时有所不同!!!
官方的如下
    /* Region 6 setting: Memory with Normal type, not shareable, outer/inner write back */
MPU->RBAR = ARM_MPU_RBAR(6, 0x20200000U);
MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_256KB);
原子哥的如下
MPU->RBAR=ARM_MPU_RBAR(6,0X20200000);                        //region 6,起始地址0X2020 0000,OCRAM首地址,相同地址段设置,region大的覆盖小的
MPU->RASR=ARM_MPU_RASR(0,ARM_MPU_AP_FULL,0,1,1,0,0,ARM_MPU_REGION_SIZE_256KB);        //可执行,全访问,写回,允许共享,允许cache,禁止缓存,禁止子region,256KB大小

此处不同的有属性有 “允许共享” 和 “是否缓存”

最后验证出,问题就是出在 共享这个属性上!!!把OCRAM的共享属性给使能就OK了!!!
具体原因后面再查文档!!!
回复 支持 反对

使用道具 举报

发表于 2019-9-6 15:58:10 | 显示全部楼层
1
回复

使用道具 举报

发表于 2019-9-7 16:53:17 | 显示全部楼层
你用的是野火的代码还是原子的代码?
回复 支持 反对

使用道具 举报

发表于 2019-9-19 09:24:12 | 显示全部楼层
你使能了内存共享会和其他功能有冲突的,如果其他功能也使用这片内存的话,我现在都把USB的内存共享功能关掉了,要不然会造成我主时钟频率大幅降低
回复 支持 反对

使用道具 举报

发表于 2019-10-6 14:36:55 | 显示全部楼层
遇到了类似的现象,定义到OCRAM区域,部分代码就执行不成功,感觉跟noncache有关,但不看这个帖子,我打死不会想到需要设置MPU;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-20 03:34 , Processed in 0.044505 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表