This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

SD启动后GPIO口不能用了



GPIO1_16 ~ GPIO1_20做为输出口

用ANAD启动,正常

用JINK防真SD卡启动程序,也是正常的

放到SD卡后启动,GPIO1_16 ~ GPIO1_20做为输出口就没有反应了

程序全是AM335X_StarterWare demo

SD卡后启动程序没有做修改

想不能为什么会这样

请指教

===

经我测试,当我把开关拨到SD卡启动时,这时不放卡

会自动跳到NAND启动,但这时上面那几个GPIO口也不正常了,和SD卡启动现象一样

当开关拨到NAND启动时,一切正常

不管启动怎么选,APP函数是一样的,同一个函数

不同启动是不是还要修改其它的地方吗?启动函数都是DEMO中的,我没修改过

  • 查了GPIO的pinmux配置没有?

    先确认你目前的这些GPIO的pinmux配置是正确的再检查GPIO模块的配置,从control module寄存器里面可以查到相应信息。

  • pinmux配置是正确,

    经我测试,当我把开关拨到SD卡启动时,这时不放卡

    会自动跳到NAND启动,但这时上面那几个GPIO口也不正常了,

    和SD卡启动现象一样

    当开关拨到NAND启动时,一切正常

    不管启动怎么选,APP函数是一样的

    不同启动是不是还要修改其它的地方吗?启动函数都是DEMO中的,我没修改过

  • 没看懂这个意思。你对GPIO口的操作,是在你的application里面操作的吗?

    启动的时候,芯片会根据你的boot模式的选择,配出一个pinmux,来使能你启动序列中的设备接口。在MLO执行完了,开始执行app后,这时候才能运行到你自己对pinmux的配置,以及对GPIO口的控制。使用哪种启动方式,不会影响到你app中的设置,除非是某些pin脚你没有配置,沿用了初始值,才会有影响。

  • 经我测试,当我把开关拨到SD卡启动时,这时不放卡

    会自动跳到NAND启动,但这时上面那几个GPIO口也不正常了

    这里GPIO不正常了,指出现了什么现象?正常的现象是怎样的?

  • GPIO不正常了,就是说它不工作了

    我现在接的是GPIO_16接LED ,让LED跳变(4秒一次)

    我现在接的是GPIO_20接KEY ,用中断,

    同一个app,(NAND启动时把它下载到NAND FLASH中)

    1:用NAND 启动 LED跳变,KEY 也用正常中断,执行中断函数,说明我的GPIO口配的是对的

    2:用SD卡启动  LED没反应,KEY 进不了中断,按下反应,其它功能都是好的,如触摸等

    3:用防真器防真MLO文件(看APP从SD卡中载正常),LED跳变,KEY 也用正常中断,

    4:开关拨到SD卡启动时,这时不放卡会自动跳到NAND启动,启动后  LED没反应,KEY 进不了中断,按下反应,其它功能都是好的,如触摸等

    请指都

    启动文件都是DEMO中的,没有做修改


  • 我把GPIO1_16的程序放到SD卡启动中,也是JLINK防真是好的,led在ImageCopy()这前是亮的

    用SD卡启动就不对了,led没有反应

    请帮忙看一下那儿错了

    附:


    #define LED_OFF GPIO_PIN_HIGH
    #define LED_ON GPIO_PIN_LOW

    #define CONTROL_CONF_PULLUDDISABLE 0x00000008
    #define CONTROL_CONF_PULLUPSEL 0x00000010
    #define CONTROL_CONF_RXACTIVE 0x00000020
    #define CONTROL_CONF_SLOWSLEW 0x00000040
    #define CONTROL_CONF_MUXMODE(n) (n)

    /* Slow Slew Rate - Receiver Disabled - Pullup - PU/PD feature Enabled. */
    #define PAD_SL_RXD_PU_PUPDE(n) (CONTROL_CONF_PULLUPSEL | \
    CONTROL_CONF_RXACTIVE | \
    CONTROL_CONF_MUXMODE(n))

    #define LED_INST_BASE_ADD         (SOC_GPIO_1_REGS)

    #define GPIO_1_4                 (0x0810)

    #define GPIO_LED4_OffSETADDR GPIO_1_4

    GPIO1ModuleClkConfig();//DEMO中的,我没做修改
    /* Doing a pin multiplexing and selecting led for use. */
    GpioPinMuxSetup(GPIO_LED4_OffSETADDR, PAD_SL_RXD_PU_PUPDE(7));
    GPIOModuleEnable(LED_INST_BASE_ADD);
    GPIOModuleReset(LED_INST_BASE_ADD);
    /* Configuring led pin as an output pin. */

    GPIODirModeSet(LED_INST_BASE_ADD,GPIO_LED4_PIN_NUM,GPIO_DIR_OUTPUT);

    /* Driving LED pin to logic Low. */
    GPIOPinWrite(LED_INST_BASE_ADD,GPIO_LED4_PIN_NUM,LED_ON); //LED 亮


  • 我描述一下你现在的问题,看看有啥误解没有,你现在的pinmux配置以及GPIO的LED点亮工作,还有key中断的响应这些操作,都是在你的app中进行设置的是吗?

    SD或者NAND启动的时候,是先运行MLO,再运行app的。然后,在不同的启动模式下,你使用的是相同app的,但是gpio的反应结果却不一样,也就是你说的上面的问题,对吗?

    这里面,在SD卡启动和NAND启动的时候,在app中能否加入打印,确保你的app正常执行了?

  • 这段代码里面的pinmux设置被注释了?//GpioPinMuxSetup(GPIO_LED4_OffSETADDR, PAD_SL_RXD_PU_PUPDE(7));
    这样,你使用Jlink仿真的时候,注意查一下control module寄存器的值,目前你使用的是GPIO_1_4的话,在你的led灯亮和不亮的时候,查一下0x44e10810地址的值,确认他是不是0x27。

    你使用的GPIO_1_4这个pin脚和gpmc_ad4是复用的,如果是nand启动的话,gpmc_ad4可能会被配成模式0,来使能NAND。在后面的过程中,也可能会发生更改,所以一定要确认你的pinmux配置模式是7,而且后面没有更改,才能保证这个口一直被用作GPIO。

  • 1:GpioPinMuxSetup(GPIO_LED4_OffSETADDR, PAD_SL_RXD_PU_PUPDE(7));这句我是发贴是不小心注掉的,程序中是有的

    2:你描述问题是对的

    3:app搞定运行了,因为APP中还有其它东西,如 LCD

    4:你看到的这点程序,本来是APP中的,我现在放到MLO(SD卡启动)文件中,Jlink仿真MLO文件时led灯亮,正常运行,地址中的值也是对的

    但把MLO文件下载到SD卡,用SD卡启动时就不正常,LED不亮,很怪,\

    SD卡启动时串口取地址值如下:

    0x44E10000+0x0810 =0x27

    0x4804C000+0x134=0xfffeffff

    0x4804C000+0x190=0x00 // LEN_ON

    0x4804C000+0x194=0x10000  //LED OFF

    看了值感觉都是对的,

    GPIO1_16~ GPIO1_24 做I/0用都在此时不对,是不是与GPMC有关地方我没设置对?

  • 问题可能出象在当检测到SD卡启动后,

    发现有GPIO1 所有I/0有一个置“高”动作,可能做了设置,由此引起有些寄存器值改变

    这是在运行到MLO中main之前的,而仿真时没有这个置“高”动作,所以仿真是好的

    我现在就是不知道在那个地方做这个置“高”动作的,改变了那些寄存器值

    NAND启动也没有这个动作,所以它运行也是正常的

  • 顶起来, 不能沉下去,问题还没解决

  • 看了你上面的描述,现在你遇到的问题是不是说在MLO中,某个操作改变了GPIO1的寄存器的值,然后出现了这个问题?

    可否明确一下,你在MLO中添加这段操作代码的具体位置?因为目前你使用的这几个脚和GPMC_AD脚是复用的,需要排查一下,是不是此后的代码去使能GPMC了(比如尝试从NAND flash/NOR flash中读取数据),由此引起了值的变化。

  • 我上传代码了,请在问题就是LED开关这功能不管你放到APP中还是MLO中,只要选用MSD启动,PGIO口就没有动作

    其它启动方式都是好的,DEMO中文件,没有做修改

    我要问题简单,就是让LED_GPIO口能做为输出口用就行了

    #define LED_INST_BASE_ADD (SOC_GPIO_1_REGS)
    #define GPIO_LED4_PIN_NUM (16u)
    #define GPIO_LED5_PIN_NUM (17u)
    #define GPIO_LED6_PIN_NUM (18u)
    #define GPIO_LED7_PIN_NUM (19u)

    #define GPIO_1_4 (0x0810)
    #define GPIO_1_5 (0x0814)
    #define GPIO_1_6 (0x0818)
    #define GPIO_1_7 (0x081c)


    #define GPIO_LED4_OffSETADDR GPIO_1_4
    #define GPIO_LED5_OffSETADDR GPIO_1_5
    #define GPIO_LED6_OffSETADDR GPIO_1_6
    #define GPIO_LED7_OffSETADDR GPIO_1_7

    //#define GPIO_DIR_OUTPUT 0

    //#define GPIO_PIN_LOW 0

    //#define GPIO_PIN_HIGH 1

    #define LED_OFF GPIO_PIN_HIGH
    #define LED_ON GPIO_PIN_LOW

  • 》我上传代码了,请在问题就是LED开关这功能不管你放到APP中还是MLO中,只要选用MSD启动,PGIO口就没有动作

    之前你描述的时候,不是说app中是正常的吗?如果app中也不正常,就从app开始debug起:把你做LED开关功能的代码放到app中,选择MMC/SD启动后,打印Pinmux的寄存器配置对吗?GPIO1的相关clock是否也正常?

  • 你应该看看我前面的描述

    1:LED功能先放到APP中,用NAND 启动是正常的,用SD卡启动不正常,

    2:LED功能先放到APP中,把开关拨到SD卡启动,不放SD卡,过一会会跳到NAND启动,这时也不正常,

    意思就是说当把开关拨到SD卡启动,不管怎么启动,这个,LED GPIO口功能不行,

    3:没办法 ,我把这代码放到SD MLO中,这个GPIO口输出没返应该,当放到NANAD MlO(BOOT)中,这个GPIO口输出功能正常

    我上传的代码是就放到SD MLO中的

    4:我上传的这代码,也就是SD卡的MLO文件代码,我用jlink仿真时,GPIO口输出功能正常,下载在SD卡中就无,GPIO口无输出功能

    这问题我已描述了好几次了,不知道是我描述有问题还是怎么回事,

    Pinmux的寄存器我也贴出来了

    代码我也上传了,现在的问题是我上传的代码中 LED GPIO输出没反应,Pinmux配的肯定是对的,如果不对在NAND下也应该是不正常的

    我感觉应该是DEMO中的一个BUG,

    放便打开打码看一下吗,

    谢谢


  • 此问题已解决

    是与检测调引脚有关,

    当检测到是SD卡启动时,GPIO口默认值不一样

    谢谢大家

  • 你好,可否分享一下更为具体的信息:

    是说在SD卡启动时,GPIO的control module里面的设置不一样了吗?还是说GPIO本身module的配置? 这个检测调引脚的工作是哪一步进行的呢?

  • 测调引脚的工作是哪一步进行?这你们应该知道吧

    我是刚上手你们芯片,不熟,我就知道我写的MLO文件,要进入main主函前

    用SD卡启动时有个对芯片操做过程,NADND是没有的

    问题就出在这个地方