前段时间写了DM3730通过GPMC总线跟FPGA通讯的驱动,中间有不少的插曲,现在总结如下。
1 初次写Linux下的驱动,花了一段时间来理解和学习Linux驱动的编写。这期间还是要感谢网上的一篇文章:http://bbs.eeworld.com.cn/thread-333652-1-1.html
作者所用虽然是GPMC to 16-Bit Nonmultiplexed模式,自己采用的是GPMC to 16-Bit Multiplexed模式,但是大同小异,代码基本上可以粘贴直接使用,唯一需要变的是几个寄存器的值,不过按照自己的经验,调试的时候不要按照自己的臆想随便加大或者减少时钟个数,最好先使用默认的值来调试,完了根据FPGA或者示波器捕捉到的时序图添加一两个时钟即可。
2 与FPGA的调试,这个过程刚开始还是比较顺利的。可以正确的发送数据,同时也可以正确的接受数据,但是在接收FPGA端发送过来的数据的时候就出现问题了。ARM这端的文件系统总是会被破坏,出现如下的提示:
[ 497.708312] uncorrectable error :
[ 497.711944] UBI error: ubi_io_read: error -74 while reading 60 bytes from PEB 49:77