GPMC 数据总线失效问题 - AM57x - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2895|回复: 0
打印 上一主题 下一主题

[已解决] GPMC 数据总线失效问题

[复制链接]

2

主题

2

帖子

1032

积分

金牌会员

Rank: 6Rank: 6

积分
1032
跳转到指定楼层
楼主
发表于 2019-12-5 10:32:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nsdie 于 2019-12-5 10:32 编辑

您好,我想用5728通过双口RAM和28335进行数据交互,于是我想在5728的A15端通过gpmc采用nandflash方式与双口ram连接,但是操作gpmc时出现了地址总线没有信号,片选和数据总线有效的现象,但是我查询相关资料是可以gpmc采用nandflash方式与双口ram连接。具体现象如下:我在设备树中定义的地址空间ranges = <0 0 0x12000000 0x01000000>,当我对0x12000000到0x12000063这块空间进行100次数据发送,在双口ram那端读取的始终是我最后一次发送的数据,也就是说我每次发送都发送到双口ram一个地址上,进行了重复覆盖,并且数据正确。进而我观测gpmc接口信号,发现片选信号和数据总线正常,但是数据总线没有信号,于是我想是不是复用方式选取错误,于是我更改了gpmc,mux-add-data = <0>,尝试了0、1、2结果一样,再后来我发现不管我映射的地址空间为何值,即ranges = <0 0 0x12000000 0x01000000>中0x12000000改为0x8000000或者0x10000000,对地址0x12000000的访问有效,对0x8000000和0x10000000地址访问都是失败的,我感觉是我的设备树和管脚定义没有生效,于是我加入了这样一句话pinctrl-0 = <&gpmc_pins_default>,引用的管脚定义,这次更奇怪了,我对0x8000000和0x10000000以及0x12000000的访问都失效并且都死机了。我想问如何解决gpmc地址总线失效问题,是否是我设备树编写错误,还是使用gpmc时需要其他方法。

下面是设备树中的gpmc代码
gpmc: gpmc@50000000 {
                        compatible = "ti,am3352-gpmc","samsung,k6f1616u6a", "mtd-ram";
                        ti,hwmods = "gpmc";
                        reg = <0x50000000 0x37c>;      /* device IO registers */
                        interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&edma_xbar 4 0>;
                        dma-names = "rxtx";
                        gpmc,num-cs = <8>;
                        gpmc,num-waitpins = <2>;
                        #address-cells = <2>;
                        #size-cells = <1>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
                        gpio-controller;
                        #gpio-cells = <2>;
                        status = "disabled";
                };
下面是gpmc管脚定义
/* gpmc pins */
    gpmc_pins_default: gpmc_pins_default {
        pinctrl-single,pins = <
            DRA7XX_CORE_IOPAD(0x3400, (PIN_INPUT_PULLUP | MUX_MODE0))  /* gpmc_ad0.gpmc_ad0,  MODE0 */
            DRA7XX_CORE_IOPAD(0x3404, (PIN_INPUT_PULLUP | MUX_MODE0))  /* gpmc_ad1.gpmc_ad1,  MODE0 */
            DRA7XX_CORE_IOPAD(0x3408, (PIN_INPUT_PULLUP | MUX_MODE0))  /* gpmc_ad2.gpmc_ad2,  MODE0 */
            DRA7XX_CORE_IOPAD(0x340C, (PIN_INPUT_PULLUP | MUX_MODE0))  /* gpmc_ad3.gpmc_ad3,  MODE0 */
            DRA7XX_CORE_IOPAD(0x3410, (PIN_INPUT_PULLUP | MUX_MODE0))  /* gpmc_ad4.gpmc_ad4,  MODE0 */
            DRA7XX_CORE_IOPAD(0x3414, (PIN_INPUT_PULLUP | MUX_MODE0))  /* gpmc_ad5.gpmc_ad5,  MODE0 */
            DRA7XX_CORE_IOPAD(0x3418, (PIN_INPUT_PULLUP | MUX_MODE0))  /* gpmc_ad6.gpmc_ad6,  MODE0 */
            DRA7XX_CORE_IOPAD(0x341C, (PIN_INPUT_PULLUP | MUX_MODE0))  /* gpmc_ad7.gpmc_ad7,  MODE0 */
            DRA7XX_CORE_IOPAD(0x3420, (PIN_INPUT_PULLUP | MUX_MODE0))  /* gpmc_ad8.gpmc_ad8,  MODE0 */
            DRA7XX_CORE_IOPAD(0x3424, (PIN_INPUT_PULLUP | MUX_MODE0))  /* gpmc_ad9.gpmc_ad9,  MODE0 */
            DRA7XX_CORE_IOPAD(0x3428, (PIN_INPUT_PULLUP | MUX_MODE0))  /* gpmc_ad10.gpmc_ad10, MODE0 */
            DRA7XX_CORE_IOPAD(0x342C, (PIN_INPUT_PULLUP | MUX_MODE0))  /* gpmc_ad11.gpmc_ad11, MODE0 */
            DRA7XX_CORE_IOPAD(0x3430, (PIN_INPUT_PULLUP | MUX_MODE0))  /* gpmc_ad12.gpmc_ad12, MODE0 */
            DRA7XX_CORE_IOPAD(0x3434, (PIN_INPUT_PULLUP | MUX_MODE0))  /* gpmc_ad13.gpmc_ad13, MODE0 */
            DRA7XX_CORE_IOPAD(0x3438, (PIN_INPUT_PULLUP | MUX_MODE0))  /* gpmc_ad14.gpmc_ad14, MODE0 */
            DRA7XX_CORE_IOPAD(0x343C, (PIN_INPUT_PULLUP | MUX_MODE0))  /* gpmc_ad15.gpmc_ad15, MODE0 */
            DRA7XX_CORE_IOPAD(0x3470, (PIN_OUTPUT_PULLUP | MUX_MODE5 ))       /* (R13) gpmc_a0.gpmc_a0 */
            DRA7XX_CORE_IOPAD(0x34BC, (PIN_OUTPUT_PULLUP | MUX_MODE5 ))             /* (V14) gpmc_a1.gpmc_a1 */
            DRA7XX_CORE_IOPAD(0x3448, (PIN_OUTPUT_PULLUP | MUX_MODE0 ))       /* (U14) gpmc_a2.gpmc_a2 */
            DRA7XX_CORE_IOPAD(0x344c, (PIN_OUTPUT_PULLUP | MUX_MODE0 ))       /* (T14) gpmc_a3.gpmc_a3 */
            DRA7XX_CORE_IOPAD(0x3450, (PIN_OUTPUT_PULLUP | MUX_MODE0 ))       /* (R14) gpmc_a4.gpmc_a4 */
            DRA7XX_CORE_IOPAD(0x3454, (PIN_OUTPUT_PULLUP | MUX_MODE0 ))       /* (V15) gpmc_a5.gpmc_a5 */
            DRA7XX_CORE_IOPAD(0x3458, (PIN_OUTPUT_PULLUP | MUX_MODE0 ))       /* (U15) gpmc_a6.gpmc_a6 */
            DRA7XX_CORE_IOPAD(0x345c, (PIN_OUTPUT_PULLUP | MUX_MODE0 ))       /* (T15) gpmc_a7.gpmc_a7 */
            DRA7XX_CORE_IOPAD(0x3460, (PIN_OUTPUT_PULLUP | MUX_MODE0 ))       /* (V16) gpmc_a8.gpmc_a8 */
            DRA7XX_CORE_IOPAD(0x3464, (PIN_OUTPUT_PULLUP | MUX_MODE0 ))       /* (U16) gpmc_a9.gpmc_a9 */
            DRA7XX_CORE_IOPAD(0x3468, (PIN_OUTPUT_PULLUP | MUX_MODE0 ))       /* (T16) gpmc_a10.gpmc_a10 */
            DRA7XX_CORE_IOPAD(0x346c, (PIN_OUTPUT_PULLUP | MUX_MODE0 ))       /* (V17) gpmc_a11.gpmc_a11 */
            DRA7XX_CORE_IOPAD(0x34B4, (PIN_OUTPUT_PULLUP | MUX_MODE0)) /* gpmc_cs0.gpmc_cs0, MODE0 */
            DRA7XX_CORE_IOPAD(0x34C8, (PIN_OUTPUT_PULLUP | MUX_MODE0)) /* gpmc_oen_ren.gpmc_oen_ren MODE0 */
            DRA7XX_CORE_IOPAD(0x34CC, (PIN_OUTPUT_PULLUP | MUX_MODE0)) /* gpmc_wen.gpmc_wen MODE0 */
        >;
    };
};
下面是gpmc映射、时序信息
&gpmc {
        depth = <1>;    /* only create devices on depth 1 */
        status = "okay";

        #address-cells = <2>;
        #size-cells = <1>;

        ranges = <0 0 0x12000000 0x01000000>;  /* CSn0 0, addr 0x01000000, size 0x1000000 (16MiB) */

        gpmc_device0@0,0 {
               
                compatible = "cfi-flash";
                linux,mtd-name= "intel,pf48f6000m0y1be";

                #address-cells = <1>;
                #size-cells = <1>;

                status = "okay";

                reg = <0 0 0x01000000>;

                /* CONFIG 1 */
                bank-width = <1>;               /* GPMC_CONFIG1_DEVICESIZE(1) 2: 16bits */
                gpmc,mux-add-data = <0>;        /* GPMC_CONFIG1_MUXTYPE(0) 2: address-data multiplexing mode */
                gpmc,device-type = <0>;
                /* CONFIG 2 */
                gpmc,cs-on-ns = <0>;
                gpmc,cs-rd-off-ns = <37>;
                gpmc,cs-wr-off-ns = <37>;

                /* CONFIG 3 */
                gpmc,adv-on-ns = <3>;
                gpmc,adv-rd-off-ns = <11>;
                gpmc,adv-wr-off-ns = <11>;

                /* CONFIG 4 */
                gpmc,oe-on-ns = <15>;
                gpmc,oe-off-ns = <37>;
                gpmc,we-on-ns = <15>;
                gpmc,we-off-ns = <33>;

                /* CONFIG 5 */
                gpmc,rd-cycle-ns = <37>;
                gpmc,wr-cycle-ns = <37>;
                gpmc,access-ns = <33>;
                gpmc,page-burst-access-ns = <0>;

                /* CONFIG 6 */
                gpmc,bus-turnaround-ns = <0>;
                gpmc,cycle2cycle-delay-ns = <0>;
                gpmc,wr-data-mux-bus-ns = <15>;
                gpmc,wr-access-ns = <26>;
                gpmc,cycle2cycle-samecsen;
                gpmc,cycle2cycle-diffcsen;
        };
};
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-4-20 06:50 , Processed in 0.034409 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表