嵌入式开发者社区

标题: AM5728---GPMC驱动 [打印本页]

作者: 林格格    时间: 2019-4-17 09:44
标题: AM5728---GPMC驱动
由于新内核采引入了了设备树。对于硬件配置上有些概念搞不清楚。我要实现GPMC与FPGA通讯,在编写AM5728---GPMC驱动时有些疑问希望能得到解答。
我在相应.dts文件里对GPMC的工作模式,时序等硬件配置做了如下设置:

                /* CONFIG1 ---配置: 地址,数据复用/非复用    异步/同步访问    访问位宽 */
                bank-width = <2>;                                /* 2字节,16位数据线。GPMC_CONFIG1_DEVICESIZE(1) */
                gpmc,sync-read;                                        /* GPMC_CONFIG1_READTYPE_ASYNC -异步读  */
                gpmc,sync-write;                                /* GPMC_CONFIG1_WRITETYPE_ASYNC --异步写  */
                gpmc,clk-activation-ns = <0>;                /* GPMC_CONFIG1_CLKACTIVATIONTIME(2) */
                // gpmc,burst-length = <16>;                    /* GPMC_CONFIG1_PAGE_LEN(2) */
                gpmc,mux-add-data = <0>;                    /* GPMC_CONFIG1_MUXTYPE(0) */
                //CONFIG2
                gpmc,sync-clk-ps = <10000>;         

                gpmc,cs-on-ns = <0>;
                gpmc,cs-rd-off-ns = <30>;         
                gpmc,cs-wr-off-ns = <30>;         
                //CONFIG3
                gpmc,adv-on-ns = <0>;
                gpmc,adv-rd-off-ns = <11>;           
                gpmc,adv-wr-off-ns = <11>;           
                //CONFIG4
                gpmc,we-on-ns = <7>;
                gpmc,we-off-ns = <22>;         
                gpmc,oe-on-ns = <7>;
                gpmc,oe-off-ns = <22>;         
                //CONFIG 5
                gpmc,page-burst-access-ns = <22>;
                gpmc,access-ns = <22>;              
                gpmc,rd-cycle-ns = <30>;            
                gpmc,wr-cycle-ns = <30>;     


问题1:我已经在.dts文件里对关键的几个寄存器进行了以上配置,那么我还需要在我的驱动文件(drv.c)里对CONFIG1~CONFIG1~再配置一次吗???

作者: 梁淑怡-Tronlong    时间: 2019-4-17 11:20
您好,
  您目前使用的是哪个内核,参照我们设备树文件的GPMC配置,修改成合适您们配置的参数即可,不需要写驱动。
作者: 林格格    时间: 2019-4-17 11:45
梁淑怡-Tronlong 发表于 2019-4-17 11:20
您好,
  您目前使用的是哪个内核,参照我们设备树文件的GPMC配置,修改成合适您们配置的参数即可,不需要 ...

您好,我的是4.3的内核。
按照如上所述:在.dts文件里配置相应寄存器,在驱动文件里没有再次对CONFIG1~CONFIG7再次配置。在驱动文件只是把gpmc物理地址映射为虚拟地址。gpmc.virt_addr = ioremap(((unsigned int)GPMC_ADDR), GPMC_SIZE);
               现在通过该映射回来的虚拟地址gpmc与FPGA已经能正确读写数据了,但是通过抓波形发现     GPMC实际读写数据周期  和我在.dts文件里配置的时序不一致(相差很大),请问这是什么原因呢???
作者: 梁淑怡-Tronlong    时间: 2019-4-18 08:44
您好,
   配置GPMC通过设备树文件配置即可,驱动会去读取设备树文件的配置属性来配置。
   创龙提供资料SDK3.01(Linux-4.4.19),SDK4.03(Linux-RT-4.9.65)都是通过这种方式配置。
作者: 林格格    时间: 2019-4-18 09:05
梁淑怡-Tronlong 发表于 2019-4-18 08:44
您好,
   配置GPMC通过设备树文件配置即可,驱动会去读取设备树文件的配置属性来配置。
   创龙提供资料SD ...

嗯呢,设备树文件我是参考创龙的并且结合自己的实际修改的。
       但是驱动程序是我自己写的,我怀疑是自己写的驱动程序有问题。你们是否也有相应的gpmc驱动程序供参考,在哪里可找到,可否发下链接或地址?
       非常感谢!!!
作者: 梁淑怡-Tronlong    时间: 2019-4-18 10:51
林格格 发表于 2019-4-18 09:05
嗯呢,设备树文件我是参考创龙的并且结合自己的实际修改的。
       但是驱动程序是我自己写的,我怀疑是 ...

[attach]4998[/attach]





欢迎光临 嵌入式开发者社区 (https://51ele.net/) Powered by Discuz! X3.4