MmMapIoSpace这个映射后的地址范围

qclzdh 2010-09-28 10:07:51
MmMapIoSpace这个映射后的地址范围 是不是一定在0X80000000---0XA0000000或者0XA0000000--0XB0000000这个范围里面

我做SRAM驱动的时候,片选CS1映射后是0XD1700000正常吗
...全文
395 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
haiou_arm 2010-09-28
  • 打赏
  • 举报
回复
1、WinCE6.0的驱动默认是内核层的,所以通过MmMapIoSpace影射后的地址肯定是高2G的。也就是大于0x80000000的;
2、在驱动里尽量不要用静态影射,我上次出现过采用静态影射有时候正确,有时候错误的情况,但动态就没有问题。到现在还没想通为什么!~ 最有可能的是别的地方也在用我这块地址,但修改g_oalAddressTable做静态影射后,谁还有权力用,谁还能申请到!
FLandY1982 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 qclzdh 的回复:]

那什么情况下用静态地址,什么情况下用MmMapIoSpace映射呢
[/Quote]
内核中直接使用静态地址,驱动中使用MmMapIoSpace。
qclzdh 2010-09-28
  • 打赏
  • 举报
回复
那什么情况下用静态地址,什么情况下用MmMapIoSpace映射呢
FLandY1982 2010-09-28
  • 打赏
  • 举报
回复
不相等啊,0x94000000是静态的地址,
具体地址空间我也不清楚,我觉得不用关心MmMapIoSpace映射得到的地址啊。
qclzdh 2010-09-28
  • 打赏
  • 举报
回复
还有我的这个是在流驱动的DLL里面调用的
qclzdh 2010-09-28
  • 打赏
  • 举报
回复
请问用这个MmMapIoSpace 和 用静态映射的有什么区别
qclzdh 2010-09-28
  • 打赏
  • 举报
回复
MmmapIoSpace 这个映射CSP_BASE_MEM_PA_CS5这个地址,是不应该和0x94000000相等 或者相差0X20000000
FLandY1982 2010-09-28
  • 打赏
  • 举报
回复
是的,
如果是设备驱动调用,就是用MmMapIoSpace(CSP_BASE_MEM_PA_CS5, size, TRUE)
qclzdh 2010-09-28
  • 打赏
  • 举报
回复
这个是我CACHE enabled 我是不是要加上0X20000000
qclzdh 2010-09-28
  • 打赏
  • 举报
回复
g_oalAddressTable

DCD 0x80000000, CSP_BASE_MEM_PA_CSD0, 128 ; RAM image mapping
DCD 0x88000000, CSP_BASE_MEM_PA_CSD1, 128 ; RAM image mapping
DCD 0x90000000, CSP_BASE_MEM_PA_CS0, 64 ; FLASH image mapping
DCD 0x94000000, CSP_BASE_MEM_PA_CS5, 32 ; External WEIM CS5
DCD 0x96000000, CSP_BASE_MEM_PA_CS4, 8 ; External WEIM CS4
DCD 0x96800000, CSP_BASE_MEM_PA_CS1, 8 ; SRAM
DCD 0x97000000, CSP_BASE_REG_PA_AVIC, 1 ; AVIC regs
DCD 0x97100000, CSP_BASE_REG_PA_ESDCTL, 1 ; ESDCTL + WEIM + M3IF
DCD 0x97200000, CSP_BASE_REG_PA_NANDFC, 4 ; NANDMA + NANDSA + NANDFC
DCD 0x97600000, CSP_BASE_REG_PA_GPU2D, 1 ; GPU2D controller regs
DCD 0x97700000, CSP_BASE_REG_PA_L2CC, 1 ; L2CC controller regs
DCD 0x97800000, CSP_BASE_MEM_PA_IRAM, 1 ; Internal RAM
DCD 0x97900000, CSP_BASE_MEM_PA_SECURE_IROM, 1 ; Internal Secure ROM
DCD 0x98000000, CSP_BASE_MEM_PA_AIPS1, 64 ; AIPS1 peripheral regs
DCD 0x9C000000, CSP_BASE_MEM_PA_AIPS2, 64 ; AIPS2 peripheral regs
DCD 0x00000000, 0x00000000, 0 ; Terminate table

这个应该是我的静态映射表,CSP_BASE_MEM_PA_CS5这个是CS5的实际地址,如果我要操作CSP_BASE_MEM_PA_CS5+0X800的地址,是不是直接0x94000000+0x800就好了
FLandY1982 2010-09-28
  • 打赏
  • 举报
回复
我的理解是直接静态的映射SDRAM地址空间,在内核模式可以直接操作静态映射的地址,不需要调用MmMapIoSpace.
qclzdh 2010-09-28
  • 打赏
  • 举报
回复
http://blog.csdn.net/Jack__h/archive/2009/12/04/4939911.aspx
如果是操作通过总线挂接的 I/O 或者存储器,必须先把总线地址转化成 CPU 上的系统地址,再做物理地址到虚拟地址的映射。这里需要查 CPU 的 Datasheet ,找出所要操作的I/O地址.先调用 HALTranslateBusAddress( )把总线地址转化成CPU上的系统地址, 再调用 MmmapIoSpace 函数实现虚实映射;也可以使用 TransBusAddrToVirtual ()直接把总线上的地址转化成系统的虚拟地址。


这篇文章中这样说,那么我的SRAM是不是不能直接用MmmapIoSpace,我的SRAM是挂在CS5上的,应该是AHB总线上
FLandY1982 2010-09-28
  • 打赏
  • 举报
回复
0X80000000---0XA0000000或者0XA0000000--0XB0000000 是静态的映射地址空间,前者是缓存的,后缀是非缓存的

详细的说明可以去我博客看下那篇翻译的关于内存映射的文章。
FLandY1982 2010-09-28
  • 打赏
  • 举报
回复
是正常的,0xD0000000 0xDFFFFFFF地址空间用于内核模式模块的。
qclzdh 2010-09-28
  • 打赏
  • 举报
回复
达人呢,帮忙给我解答下
qclzdh 2010-09-28
  • 打赏
  • 举报
回复
MmMapIoSpace 那为什么做动态映射 和静态映射的地址不一样呢

19,519

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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