NJ8888 发表于 2015-5-28 20:20:52

用TI AM3357 linux下搞mmap控制MCSPI卡住了

映射成功但是操作读写就发生bus error。为此做了些其他测试,用mmap映射其他地址,查看打印44E0 0000的内容(时钟管理),发现SPI_GCLK是非激活的,参照参考书配置总是没配成激活,从TI下了个裸奔的代码,找到它的MCSPI时钟配置部分,模仿它的地址,数据,用mmap配置还是不成功(不能设成想要的状态)。还发现,系统运行后,查看打印44E0 0000的内容发现定时器2 5 6是激活的,mmap后访问时正常,但定时器3 7没激活,mmap访问同样bus error。问题好像是与激活时钟有关(就像ARM M3没有使能时钟的外设访问发生硬件错故障一样),但是奇怪的是对两个GPIO mmap操作,事先查过这个GPIO没激活,但是映射后可以自如操作IO反转,没发生bus error。TI那个裸奔MCSPI,它的配置是死循环等待状态成功,我根据我打印信息,部分状态受控,部分状态无效,等不到,如果完全模仿只能卡死,所以试验是插入sleep等待并打印,反正状态不成功。以前用三星6410,mmap都能自如控制。

NJ8888 发表于 2015-5-28 20:29:57

本帖最后由 NJ8888 于 2015-5-28 20:54 编辑

另外奇怪的是用ioctl操作MCSPI是可以的,能出时钟和数据,说明驱动是做好在内核中的了。特异处是发现这种办法MOSI管脚在CS拉高后,好像是高阻了,示波器观察电平不高不低。之所以想用mmap,是发现代码两次连续ioctl会被间隔出150us延时,以前用6410也是这样,上百微秒才执行完毕,而用mmap,基本时钟发送完就可以输出下一次的数据了。

NJ8888 发表于 2015-8-11 14:53:15

这个也是没人了解过,后来上网查到一个信息(只有唯一一条),要把内核出一句话屏蔽掉重编译,试了果然好使.MMAP控制正常了
页: [1]
查看完整版本: 用TI AM3357 linux下搞mmap控制MCSPI卡住了