MMU分配Flash缓存空间的问题

JuanA1 2011-08-25 06:33:40
如题,系统环境为vxWorks,在做Flash的驱动,由于在之前一块板上已经为Flash分配了缓存地址,所以没管,直接配置了flash读写相关的控制寄存器将其搞定。现在新来了另一块板(同一系列,nand flash型号一样),完全没有nand flash的配置,访问原来的缓存基地址就会复位。
所以仿造前一块板子的程序,在结构体sysPhysMemDesc[]中为其分配空间。但依旧无法访问该基地址,极度困惑,片选也配置好了,还是不行!是不是还要有其他的操作的呢?。望高手解答!!
...全文
180 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
JuanA1 2011-09-10
  • 打赏
  • 举报
回复
楼上的意思是说,我的内存分配有冲突?
woshi_ziyu 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pro_or_gram 的回复:]

你的MMU是用 BAT block address translation 还是 TLB来做的?

看你说PTE,就不是用的BAT了。

Buffer Ram 其实就是以 Nand Flash 片选的base address 为基地址的。

你提到的“但是设置PTE还是失败” 是什么意思? “可以读Flash数据”是什么意思?
Buffer ram 如果没正确映射的话,怎么得到数……
[/Quote]
帮顶 说的有理
JuanA1 2011-09-07
  • 打赏
  • 举报
回复
pro_or_gram不好意思啊,这段时间有点忙,没看到!
是这样的,“但是设置PTE还是失败”的意思是:
我在sysPhysMenDesc结构体中加了Nand Flash的PTE(0xe2800000),但是,访问这个内存地址时依旧出错。
“可以读Flash数据”的意思是:
驱动中的读写、擦除函数都会有片选信号,应该是操作下去了。之后我将Buffer Address直接映射到内存里的地址,读写就可以了。
说明还是MMU设置有问题,很是困惑。
查看了内存分配,也没有冲突
pro_or_gram 2011-08-31
  • 打赏
  • 举报
回复
你的MMU是用 BAT block address translation 还是 TLB来做的?

看你说PTE,就不是用的BAT了。

Buffer Ram 其实就是以 Nand Flash 片选的base address 为基地址的。

你提到的“但是设置PTE还是失败” 是什么意思? “可以读Flash数据”是什么意思?
Buffer ram 如果没正确映射的话,怎么得到数据的呢?

分配的内存,你可以看看你们的config类的文件确定下,应该各个区域, ddr, immrbar,nand flash,nor flash, pci,pcie 都有提到才对的。
JuanA1 2011-08-30
  • 打赏
  • 举报
回复
多谢pro_or_gram的指导,后来我又配置了Nand Flash的memory-map寄存器,但是设置PTE还是失败,检查了片选和操作命令,都是正确的(我用示波器量了片选信号线,操作时有电平)。
我的分析是这样的,我对Flash的操作都已经正确了,controller也配置好了,可以读Flash数据,但是Buffer Ram没有正确的做映射,导致出错。所以问题就集中在了这个MMU上了,只可能是分配的内存冲突了。不知道我的理解对不对!还望指教
pro_or_gram 2011-08-29
  • 打赏
  • 举报
回复
Nand Flash控制器的memory-map的寄存器都配置好了么?

Nand flash的 buffer ram 是访问数据用的。

访问nand flash的各种命令需要访问nand flash controller 空间中的memery-map 寄存器。

我觉得楼主你有些急了,做device driver的,即使是板子本身的一个小小改动也要注意,何况换了个板子
不要听别人说什么,板子都差不多,应该很快搞定的,,这都是 shit,不做根本就不知道,有些人就是喜欢这样子估别人的工作量,然后等deadline

建议楼主稳下来,好好看看nand flash的片选配置,操作命令是否都正确了
JuanA1 2011-08-28
  • 打赏
  • 举报
回复
一个人都没有,难道问题没描述清?
【课程简介】本课程是《Armv8/Armv9架构从入门到精通 第二期》中的第四章。建议购买大课程。本课程以为armv8-aarch64、armv9为基准,不涉及armv7及其以前的版本,也不涉及aarch32。本课程包含但不限于以下内容MMU的基础学习:啥是MMU?工作原理?MMU和cache之间的关系?及其怎样相互影响的?哪些是MMU硬件自动的行为?哪些是软件可配置的行为?地址空间基础:啥是虚拟地址空间?啥是物理地址空间?啥时memory-map? 代码程序中的虚拟地址空间是怎样的?arm core硬件决定的物理地址空间是怎样的?SOC memory-map时的地址空间是怎样的?具体的外设又是怎样的地址空间?Translation Regime:系统里有多少个MMU?系统里有多少个Translation Regime?他们之间的关系是怎样的?页表翻译:MMU是怎样翻译的?页表有几级?这些信息是怎么告诉MMU的,MMU又是怎样工作的,软件又需要怎样设计?stage1和stage2的区别和使用?Descriptor:啥是Descriptor、页表项、entry、条目、页表条目? Descriptor的格式是怎样的?每一个属性位是怎样的?MMU除了完成地址转换,属性权限的控制/cache的缓存策略是怎样配置的?optee中使用MMU的示例MMU深度思考篇:开启MMU瞬间可能出现的问题以及多种常用的解决方案。注意这里提到的是多种方案,绝大多数人只知道第一种,除此之外还有没有其它的设计方式? MMU关闭时cache的缓存策略会怎样?【思考】01、一个大系统中有多少个MMU ?02、一个ARM Core中有多少个Translation regime?03、EL1&0 Translation regime Stage2、EL2 Translation regime stage1、EL2&0 Translation regime stage1 这三者的区别是什么?04、TTBR1_EL2寄存器有啥特殊性,这个寄存器是给谁使用的?05、有没有TTBR1_EL3寄存器?为什么?06、什么是memory-map? 一个ARM的系统中,有几套物理地址空间?07、页表到底有几级? 页表最少可以有几级?页表最多可以有几级?08、页表有多大? 页表存放在哪里?页表由谁来管理?09、页表是否能放在cache中?10、什么是Translation Table walk? 什么是TLB?11、请简述页表查询的过程?12、在一个大系统中,物理地址是多少位的? 物理地址是多少位指的是什么?虚拟地址又是多少位的? 物理地址的位数和虚拟地址的位数都是由谁来决定的?13、请说明entry、descriptor、页表项、条目 这个四个词汇的由来?14、TCR中有缓存属性和共享属性、页表的entry中也有缓存属性和共享属性,这俩有什么区别?15、请简述TTBR0和TTBR1的概念和意义?16、请简述cacheability和shareability属性的含义?17、stage1和stage2有何区别?18、stage1和stage2的descriptor中,有很多重复的属性,当两者属性有冲突了怎么办?19、L1、L2、L2的descriptor中也有部分相同的属性,重复时怎么办?20、Descriptor的格式有哪几种?21、Descriptor的类型有哪几种?22、简述您所观察到的系统软件中(操作系统或hypervisor)的shareability和cacheability一般都是怎样配置的?23、开启一个MMU的步骤是怎样的?24、啥是flat map? 啥是full level table?25、页表中的AF属性位、DBM属性位分别是干啥的?26、页表中的nG属性位是干啥的?27、页表中的Contiguous属性位是干啥的?28、在开启MMU的瞬间会考虑哪些事情?【课程目录】当前21节课,6.8小时

2,180

社区成员

发帖
与我相关
我的任务
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
  • VxWorks开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧