现基于am3352的linux3.2SDK,GPMC外接了一个8位并口设备,GPMC配置如下:
gpmc_cs_write_reg(cs,GPMC_CS_CONFIG1, 0x0);
gpmc_cs_configure(cs, GPMC_CONFIG_DEV_TYPE, GPMC_DEVICETYPE_NOR);
val = gpmc_cs_read_reg(cs,GPMC_CS_CONFIG1);
val |= GPMC_CONFIG1_READTYPE_SYNC;
val |= GPMC_CONFIG1_WRITETYPE_SYNC;
gpmc_cs_write_reg(cs, GPMC_CS_CONFIG1, val);
gpmc_cs_set_timings(cs, &uc_timing);
gpmc_cs_request(cs, SZ_16M, &mem_base_phys);
if (!request_mem_region(mem_base_phys,SZ_16M, "UC")) {
ret = -EBUSY;
goto ERR;
}
mmio = ioremap((mem_base_phys,SZ_16M);
offset = 0x800;
__raw_writeb(0XE2,mmio+offset); –> 此处出现Segmentation fault
那位大侠帮忙看看,GPMC操作漏了那些步骤??按道理ioremap后的内存是可以读写的,不知道为什么出现了Segmentation fault
yongqing wang:
这个好像是内存越位了
user6051027:
回复 yongqing wang:
这个内存地址是通过gpmc_cs_request获取,然后ioremap得到的,按理不应该出现段错误。
user6051027:
回复 yongqing wang:
这个跟我上面的操作步骤差不多,检查过步骤没有遗漏点,但不知道为什么这个地址会非法。
yongqing wang:
回复 user6051027:
把获取的地址打印出来看看是啥
user6051027:
回复 yongqing wang:
现在segment fault的问题解决了,但用示波器看不到GPMC引脚有数据输出,检查的引脚复用没有问题,不知道哪里出问题了,GPMC的nandflash是正常的。