我的CPU(ARM核)接了一块Controller. 接口是static memory interface .片选CS决定了外设起始地址为0X14000000,我想问的是有关I/O内存的概念,因为CPU和外设之间只有一条地址线addr2,所以是否可以说在CPU看来,这个外设只有2个I/O内存地址 0x14000000 和0X14000004.而向地址0x14000000 写的时候其实是写命令到外设,因为ADD2接到了HD/C(数据、命令选择引脚)。同理,向地址0X14000004写的时候是写数据到外设。我在外设的驱动程序看到它就是这样来访问的。之前需要用ioremap函数讲物理地址映射到内核虚拟空间。通过这样的访问能成功的读到外设的ID
还有个问题是,我现在在应用程序端 通过打开/dev/mem端口,然后用mmap (... 0x14000000)来将外设的i/o内存映射到用户空间的虚拟地址。然后用同样的方法来读写外设。但是不能成功的读到外设的ID。但是我可以用这种方法成功读写GPIO的寄存器。不知道这种方法是否可以访问外设的I/O内存?还是mmap函数是有条件的?
困扰了好几天,没想明白,希望大家指点。非常感谢。