TI中文支持网
TI专业的中文技术问题搜集分享网站

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中的,我没修改过

Steven Liu1:

查了GPIO的pinmux配置没有?

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

xblzy0423 xblzy0423:

回复 Steven Liu1:

pinmux配置是正确,

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

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

和SD卡启动现象一样

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

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

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

Steven Liu1:

回复 xblzy0423 xblzy0423:

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

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

Steven Liu1:

回复 xblzy0423 xblzy0423:

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

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

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

xblzy0423 xblzy0423:

回复 Steven Liu1:

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中的,没有做修改

xblzy0423 xblzy0423:

回复 xblzy0423 xblzy0423:

我把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 亮

Steven Liu1:

回复 xblzy0423 xblzy0423:

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

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

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

Steven Liu1:

回复 xblzy0423 xblzy0423:

这段代码里面的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。

xblzy0423 xblzy0423:

回复 Steven Liu1:

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有关地方我没设置对?

xblzy0423 xblzy0423:

回复 xblzy0423 xblzy0423:

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

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

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

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

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

赞(0)
未经允许不得转载:TI中文支持网 » SD启动后GPIO口不能用了
分享到: 更多 (0)