首页 > 其他分享 >AM335X 、AM5728 NOR flash启动

AM335X 、AM5728 NOR flash启动

时间:2023-01-09 13:00:46浏览次数:57  
标签:r4 GPMC r3 AM335X flash asm AM5728 nor


 

现在AM335X上设计nor flash启动的相关要点总结如下,供大家参考。



1. 关于nor flash启动的信息



可以参考TRM的26.1.7.2 XIP Memory章节,在这里就不详述了。



2. 设计时注意点



由于AM335X的管脚有限,所以在应用中许多客户会考虑采用GPMC数据线/地址线复用的方式连接外部的nor flash。这样可以将GPMC_AD[15:0]即作为16bit数据线,又作为低16bit的地址线。



那在这种情况下,针对具体设计,需要注意哪些地方?



在上述应用中,GPMC_AD会从即作为16bit数据线,又作为低16bit的地址线;从TRM的Table 7-5. GPMC Pin Multiplexing Options表格中可以知道,GPMC_A[10:1]会作为nor flash的高位地址线。而GPMC_A[10:1]存在两种复用方式,即可以将AM335X的pinmux mode0的这一组pin复用为GPMC_A[10:1],也可以将另一组复用为GPMC_A[10:1]。


AM335X 、AM5728 NOR flash启动_地址空间


针对上述的两种连接,设计原理图时,需注意。



(1)采用pinmux mode0组的连接时,需注意



    (a)latch需要采用上升沿锁存的,而不能使用电平锁存的。这是由于AM335x内的ROM CODE在nor flash启动时,有一组固定的GPMC时序。



    (b)高位地址线需要作下拉处理。由于ROM CODE在nor flash启动时,只对GPMC_AD[15:0]进行了初始化,而未对GPMC_A[10:1]进行。如果需要ROM CODE在启动初期时能够正确看到nor flash的地址空间,需要对高位地址线作下拉处理。



AM335X 、AM5728 NOR flash启动_NOR启动_02



(2) 采用pinmux mode1的连接时,需注意



由于此时GPMC_A[10:1]与LCD_DATA复用,而LCD_DATA又在启动初期作为SYSBOOT管脚使用,在其管脚上会根据启动序列的选择存在相应的上下拉。这就与(1)中要求的nor flash启动初期需要对GPMC_A[10:1]一直保持下拉存在冲突。所以在这种应用下,需要增加一个bus transceiver对两者进行隔离。见下图。



AM335X 、AM5728 NOR flash启动_NOR启动_03



由于SYSBOOT的管脚状态只有在PORz的上升沿才会读取。而warm reset的输入管脚nRESET_OUT会在PORz完成后持续一段时间低电平,可参考TRM的Figure 8-19. PORz。所以可以通过此信号来作为Bus transceiver的控制信号。当nRESET_OUT为低时,根据​​SN74AVC32T245​​的逻辑,连接在总线上的信号会是A到B,期间PORz信号的上升沿触发时段,可以读取SYSBOOT的管脚状态。当nRESET_OUT持续一段时间低电平后,其电平会变为高,此时Bus transceiver则会将A侧的GPMC_A[10:1]与B侧SYSBOOT的上下拉隔离开。

 


软件方面:



在SDK-05.06.00.00及之后的版本的U-boot中已经添加了Nor flash启动的代码。在使用时,需要注意



nor flash为XIP memory,其启动时不需要将SPL拷贝到RAM中运行,而可以直接在nor flash进行。由于nor flash启动,ROM CODE只对低16位地址进行了初始化,所以启动时只能访问0x08000000起始的64K x 16bit的地址空间。在此初始化中,u-boot.bin会执行对nor flash高位地址的初始化,以便后续AM335X能访问nor flash的整个地址空间。



在u-boot/board/ti/am335x/board.c中的s_init函数中有对高地址线进行初始化的代码:

 

#ifdef CONFIG_NOR_BOOT


asm("stmfd sp!, {r2 - r4}");


asm("movw r4, #0x8A4");


asm("movw r3, #0x44E1");


asm("orr r4, r4, r3, lsl #16");


asm("mov r2, #9");


asm("mov r3, #8");


asm("gpmc_mux: str r2, [r4], #4");


asm("subs r3, r3, #1");


asm("bne gpmc_mux");


asm("ldmfd sp!, {r2 - r4}");


#endif


在选择上述表中的pinmux mode 1时,即nor flash的高位地址线连接的GPMC_A[10:1]是pinmux mode1组对应的管脚,则u-boot中不需要做修改。而如果连接的是表中的pinmux mode 0组对应的管脚,即需要修改代码如下:

#ifdef CONFIG_NOR_BOOT


asm("stmfd sp!, {r2 - r4}");


asm("movw r4, #0x844"); Start point Change from LCD_DATA1 to GPMC_A1


asm("movw r3, #0x44E1");


asm("orr r4, r4, r3, lsl #16");


asm("mov r2, #8"); Change #9 to #8, GPMC_A1 to GPMC_A11 as mode0


asm("mov r3, #11"); Change #8 to #11, because there are 11 lines.


asm("gpmc_mux: str r2, [r4], #4");


asm("subs r3, r3, #1");


asm("bne gpmc_mux");


asm("ldmfd sp!, {r2 - r4}");


#endif

 


另外,对应上述两组不同的连接时,SYSBOOT对应的设置也不相同。如选择pinmux mode0组的连接,则需要配置SYSBOOT,选择XIP(mux1)或者XIP(mux1) w/WAIT0启动。而选择pinmux mode1时,则需要配置SYSBOOT,选择XIP(mux2)或者XIP(mux2) w/WAIT0启动。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Signal

ZCZ Pin Map(Pinmux mode0 )

ZCZ Pin Map (Pinmux mode1 )

GPMC_A1

V14

R2

GPMC_A2

U14

R3

GPMC_A3

T14

R4

GPMC_A4

R14

T1

GPMC_A5

V15

T2

GPMC_A6

U15

T3

GPMC_A7

T15

T4

GPMC_A8

V16

U5

GPMC_A9

U16

R5

GPMC_A10

T16

V5

针对上述的两种连接,设计原理图时,需注意。


(1)采用pinmux mode0组的连接时,需注意

    (a)latch需要采用上升沿锁存的,而不能使用电平锁存的。这是由于AM335x内的ROM CODE在nor flash启动时,有一组固定的GPMC时序。


    (b)高位地址线需要作下拉处理。由于ROM CODE在nor flash启动时,只对GPMC_AD[15:0]进行了初始化,而未对GPMC_A[10:1]进行。如果需要ROM CODE在启动初期时能够正确看到nor flash的地址空间,需要对高位地址线作下拉处理。


AM335X 、AM5728 NOR flash启动_初始化_04

AM335X 、AM5728 NOR flash启动_AM5728_05

转存失败重新上传取消​

AM335X 、AM5728 NOR flash启动_地址空间_06

 


(2) 采用pinmux mode1的连接时,需注意


由于此时GPMC_A[10:1]与LCD_DATA复用,而LCD_DATA又在启动初期作为SYSBOOT管脚使用,在其管脚上会根据启动序列的选择存在相应的上下拉。这就与(1)中要求的nor flash启动初期需要对GPMC_A[10:1]一直保持下拉存在冲突。所以在这种应用下,需要增加一个bus transceiver对两者进行隔离。见下图。


AM335X 、AM5728 NOR flash启动_初始化_07

AM335X 、AM5728 NOR flash启动_AM5728_05

转存失败重新上传取消​

AM335X 、AM5728 NOR flash启动_NOR启动_09

由于SYSBOOT的管脚状态只有在PORz的上升沿才会读取。而warm reset的输入管脚nRESET_OUT会在PORz完成后持续一段时间低电平,可参考TRM的Figure 8-19. PORz。所以可以通过此信号来作为Bus transceiver的控制信号。当nRESET_OUT为低时,根据SN74AVC32T245的逻辑,连接在总线上的信号会是A到B,期间PORz信号的上升沿触发时段,可以读取SYSBOOT的管脚状态。当nRESET_OUT持续一段时间低电平后,其电平会变为高,此时Bus transceiver则会将A侧的GPMC_A[10:1]与B侧SYSBOOT的上下拉隔离开。



 


软件方面:


在SDK-05.06.00.00及之后的版本的U-boot中已经添加了Nor flash启动的代码。在使用时,需要注意


nor flash为XIP memory,其启动时不需要将SPL拷贝到RAM中运行,而可以直接在nor flash进行。由于nor flash启动,ROM CODE只对低16位地址进行了初始化,所以启动时只能访问0x08000000起始的64K x 16bit的地址空间。在此初始化中,u-boot.bin会执行对nor flash高位地址的初始化,以便后续AM335X能访问nor flash的整个地址空间。


在u-boot/board/ti/am335x/board.c中的s_init函数中有对高地址线进行初始化的代码:


#ifdef CONFIG_NOR_BOOT

asm("stmfd sp!, {r2 - r4}");

asm("movw r4, #0x8A4");

asm("movw r3, #0x44E1");

asm("orr r4, r4, r3, lsl #16");

asm("mov r2, #9");

asm("mov r3, #8");

asm("gpmc_mux: str r2, [r4], #4");

asm("subs r3, r3, #1");

asm("bne gpmc_mux");

asm("ldmfd sp!, {r2 - r4}");

#endif


在选择上述表中的pinmux mode 1时,即nor flash的高位地址线连接的GPMC_A[10:1]是pinmux mode1组对应的管脚,则u-boot中不需要做修改。而如果连接的是表中的pinmux mode 0组对应的管脚,即需要修改代码如下:

#ifdef CONFIG_NOR_BOOT

asm("stmfd sp!, {r2 - r4}");

asm("movw r4, #0x844"); Start point Change from LCD_DATA1 to GPMC_A1

asm("movw r3, #0x44E1");

asm("orr r4, r4, r3, lsl #16");

asm("mov r2, #8"); Change #9 to #8, GPMC_A1 to GPMC_A11 as mode0

asm("mov r3, #11"); Change #8 to #11, because there are 11 lines.

asm("gpmc_mux: str r2, [r4], #4");

asm("subs r3, r3, #1");

asm("bne gpmc_mux");

asm("ldmfd sp!, {r2 - r4}");

#endif

 


另外,对应上述两组不同的连接时,SYSBOOT对应的设置也不相同。如选择pinmux mode0组的连接,则需要配置SYSBOOT,选择XIP(mux1)或者XIP(mux1) w/WAIT0启动。而选择pinmux mode1时,则需要配置SYSBOOT,选择XIP(mux2)或者XIP(mux2) w/WAIT0启动。

 


标签:r4,GPMC,r3,AM335X,flash,asm,AM5728,nor
From: https://blog.51cto.com/u_15812463/5997096

相关文章

  • 解决flash builder 4.6调试不可用
    flashbuilder4.6在使用debug调试时需要系统安装相应浏览器对应的flashplayerdebug版本,flashplayerdebug到adobe官网下载最新的即可,下载地址为:​​http://www.adobe.com/......
  • Flash shader滤镜的使用
    importflash.net.URLLoader;importflash.events.Event;importflash.net.URLRequest;importflash.display.Shader;importflash.net.URLLoaderDataFormat;importflash.f......
  • 用js控制flash来实现全屏效果
    说起来真是惭愧,学习flash都三四年了,flash在网页中全屏的问题一直都没有得到比较好的解决。今天在看js方面的书籍,flash始终是镶嵌于网页中的插件,与浏览器有着相依为命的关系......
  • AS:Flash AS3中获取浏览器信息及URL相关参数(并非swf url地址)
    好久没来这里了,最近发现网络上对此类信息的封装少的可怜,没有一个是比较完整的,今天又是周未,不敲点代码手痒痒的,^_^,所以本人手贱借此时发布一篇是关于 AS3中获取浏览器信息......
  • ubunut安装flash
    1kxb@kxb:~$sudoapt-getinstallflashplugin-installer2[sudo]kxb的密码:3正在读取软件包列表...完成4正在分析软件包的依赖关系树5正在读取......
  • 痞子衡嵌入式:探讨i.MXRT下FlexSPI driver实现Flash编程时对于中断支持问题
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT下FlexSPIdriver实现Flash编程时对于中断支持问题。前段时间有客户在官方社区反映i.MXR......
  • linux led flash驱动分析
    led作为嵌入式设备中常见的器件,特别是在手机上,一般手机现在都会配置1-2led灯,用于camera补光和手电筒照明功能。led驱动是字符设备,数据流和操作比较简单。闪光灯的几种模......
  • 解读Datasheet系列:W25Q80DV(华邦 SPI Flash)
    本文只对W25Q80DV数据手册的一部分进行解读,其涵盖的内容基本足够开发标准SPI接口的Linux驱动和裸板驱动。完整的Datasheet下载:##一般描述W25Q80DV(8M-bit)是一个串行......
  • 监控flash_recovery_area的使用情况
    监控flash_recovery_area的使用情况可以查询2个视图:1.V$FLASH_RECOVERY_AREA_USAGE:displaysusageinformationaboutflashbackrecoveryareas SQL >   select......
  • Flash CS5 官方简体中文正式原版下…
    ​    大名鼎鼎的动画制作软件​​FlashCS5官方简体中文正式版​​。Flash是现今web事实上的交互动画、游戏的业界标准了,虽然现在受到其他厂商以HTML5等新......