
GE IS210DTAIH1A
GEIS210DTAIH1A(IS200DTAIH1A)IS210DTAIH1A(IS200DTAIH1A)IS210DTAIH1A(IS200DTAIH1A)NandFlash使用I/O口串行地存取数据,它不映射到存储空间中任何一个BANK区域上.对NandFlash的渎写操作通过串行数据总线进行传输。NandFlash以页(page)为单位进行读写,以块(block)为单位进行擦除,本文用到的NandFlash页(page)大小为(512+16)Byte,块(block)大小等于32个页的大小。每页的最后16Byte不用于存储程序数据,它主要用于存储ECC校验、标志位等信息。对NandFlash的操作主要是通过向NandF1ash控制器发送命令来进行的,对不同型号的NandFlash,其命令有所不同。由于NandFlash以块(block)为单位进行擦除,以页为单位进行写入,所以擦除与写入的速度都很快。由于NandFlash不能芯片内执行,S3C2410必须提供一种机制支持从NandFlash启动。S3C2410提供了这样一种机制,当设置为Nandflash启动时,系统加电或复位后,使能NandFlash控制器的自动启动模式,NandFlash中的前4KB代码自动地被拷贝到位于CPU内部的称为Steppingstone的SRAM中,这是启动代码的第一次拷贝,这次拷贝由硬件自动完成.然后这块SRAM被映射到存储空间中的000000000处,CPU从这个地址处开始执行启动代码。由于CPU内部的SRAM仅有4KB,不能保证整个VIVI都被从NandFlash中拷贝到CPU内部的SRAM中,所以这前4KB的代码要保证完成把整个VIVI从NandFlash拷贝到执行效率更高的RAM中运行以及程序的跳转任务,此时从NandFlash到SDARM的拷贝过程就是所谓的软件拷贝。3程序拷贝过程分析3.1VIVI的编译与链接编泽器对程序的处理要经过预编译阶段、编译阶段、汇编阶段及链接阶段,每个目标文件都有一系列段(section),输入文件的段(section)称为输入段(inputsection).输出文件的段(section)则称为输出段(outputsection)。在VIVI的链接过程中,用到了一个链接脚本文件,它描述了各个输入文件的各个段(section)如何映射到输出文件的各个(section)中,并控制输出文件中secrion和符号的内存布局,此内存布局决定了VlVI的运行时域。在此阶段,链接器LD利用链接脚本把各种目标文件和库文件链接起来,并重定向它们的数据,完成符号解析,最后把所有的目标文件链接成为一个可执行的目标文件,即为可烧写到Flash中的VIVI映像。针对本系统开发板的VIVI链接脚本对原链脚本进行了改进,添加了第<6>行,下文的论述会用到此处的变量viviend。<1>SECTIONS{<2>.=033f00000;<3>.text:{*(.text)}<4>.dataALlGN(4):{*(.data)}<5>.bssALIGN(4):{*(.bss)*(COMMON)}<6>vivi_end=.:<7>}其中:SECTIONS表示段。第<2>行表示当前地址为033f00000,它是text段的起始地址,也是运行时域的起始地址。第<3>行用了通配符*表示所有字符,这里的意思就是说指定的每个目标文件的textsection的内容都放到同一个.text中。第<4>行表示指定的每个目标文件的datasection的内容都放到问一个.data中,而且要四字节对齐。每<5>行表示指定的每个目标文件的bsssection的内容都放到同一个.bss中,所有的普通符号都放到COMMON中,也要四字节对齐。第<6>行是把当前地址赋值给变量vivi_end,它也是运行时域的末地址。3.2程序拷贝的改进在嵌入式系统中,映像文件都是存储在Flash存储器等一些非易失性器件中的,而在运行时,映像文件中的RW段必须重新装载到可渎写的RAM中。这就涉及到映像文件的加载时域和运行时域:加载时域就是指映像文件烧入nash中的状态,也就是映像文件运行之前的地址;运行时域是指映像文件执行时的状态,针对本文提到的NandFlash启动方式可以这么理解加载时域与运行时域:加载时域的起始地址从(映射后的内部SRAM处)000000000开始,运行时域的地址从033f00000开始。由于加载时域与运行时域的地址不同,从加载时域到运行时域的转换要由系统引导程序完成,所以VIVI必须进行数据和代码的拷贝及程序跳转工作,以完成从加载时域到运行时域的转换。VIVI的拷贝首先要确定拷贝的起始地址和目标地址,还要确定要拷贝多少代码。在此笔者对所搬运代码量进行了改进,下面是改进前的代码:<l>ldrr0,=VIVI_RAM_base<2>movrl,#Ox0<3>movr2,#020000<4>blnand_read_ll其中:第<1>行:获取VIVI在RAM中的基地址VIVI_RAM_base,也是运行时域的首地址。第<2>行:获取VIVI映像在Flash中的起始地址OxO。第<3>行:获取拷贝的代码量020000。第<4>行:跳转到nand_read_ll函数,它是用C语言写的拷贝函数(略)。此时寄存器rO,rl,r2是传递给函数nand_read_ll的三个参数。程序这样设计的缺点是不论VIVI映像有多大,它都会拷贝128KB的代码量,这样造成时间及空间的浪费或者拷贝不完整,为此笔者对上述代码进行改进:[1]ldrr0,=VIVI_RAM_base[2]ldrr2,=vivi_end[3]subr2,r2,r0[4]movr2,r2,lsr#9[5]movr2,r2,lsr#9[6]addr2,r2,#0200[7]movr1,#OxO[8]blnand_read_ll代码中用到了外部变量vivi_end,它是在链接脚本文件中定义的,是VIVI映像运行时域的末地址,在此代码中使用前要用如下语句进行声明:.externvivi_end其中:第[l]、[7]、[8]行的解释分别与未改进前的第<l>、<2>、<4>行。第[2]行:获取VIVI映像运行时域的末地址。第[3]行:获取拷贝的真实代码量。第[4],[5],[6]行:上文论述到NandFlash是按页进行读写的,本文用到的NandFlash每页有(512+16)Byte,实际用于存储映像文件的是每页的前512Byte。所以需要对上述“真实代码量”进行调整,把它调整为整数页大小,它的大小必须是页对齐的。首先把它的低9位调整为0,即是把代码量不足512Byte的部分清零,然后再加1页(page)大小(Ox200)以保证VlVI数据的完整性,这就是第[4],[5],[6]行的作用。对此代码进行改进后,拷贝的代码量更接近实际的代码量,拷贝的冗余代码量不会达到1页(page)的大小。对于其它类型的NandFlash可以根据页的大小进行类似的改进。PGESB365RGRGESL325RGRSQUARELEL36200LIGGESB365RGESL365RGESL325RGEAC325RSquareMHL3660033DC1680SquareMHL361200SchneiderJLL36175CutlerAN16SNOABMERLINNSJ400HGEAC315HJK4SIemensVL1250SQUAREPGA36100SquareMHL3670035DC1616SIemensVL1250NSquareMJA36300CutlerKD3400GESPE120ABBS6NQ800TWSiemensRV325GSquareS163AGESB465RGRGESL465RGESL425RGGEAC465RGRGEAC425RSquareMHL3610001212CutlerELHFD3050LSquareS144ASquareLC36450INDRAMATTCM1108W0INDRAMATNAM1.3-15Siemens6EC3652-0ADanfossBS03-37V/D05LA4AB32-16AB17SLOTAB1762-L40BXBSimatic6ES7321-1BL00-0AA0TelemecaniqueBMXDDI3202KMurr85068Simatic090-8ME11Phoenix2754338SCHLEICHERMDE214-48AB100L-A20ND4Siemens6SE3190-0XX87-8BF0PilzPNOZXV2PSiemens3RT1055-6AP36Siemens3RK1105-1BE04-3CA0Siemens6SE3290-0XX87-8PB0Simatic470-7LA12FestoDNC-32-500-PPV-ASimatic451-4UA13AB1756IB32Siemens6SE6420-2AB15-5AA1Simatic456-4UA12GENO-RohrtrennerRTB1DN25Siemens6FX1806-0BX02Simatic6ES5470-4UA12MURRMDG3040024Simatic158-0AD00-0XA0Siemens6GK1502-2CA10SchneiderTSXDPZ10D2AFesto4152518210Siemens6DS1326-8AASimatic314-3UH12Simatic6ES7331-7KF02-0AB0HerberholzGTD-096/090-V17-GSimatic6ES5254-4UB11Messumformer7MA2031-2CB00-0AA0PMA940440772002-011VWR986962PARKEROEM300SupermicroAOC-2025SABROOKSMF50SADVANTECHSOM-5786EMACSR3G-6650PSamsung264DC4-667-667-MHZMINICOM0SU4107/APTelecommunicationsMC6000PMK323A-110IBM75F6750-10BROOKSAM-3004-2Lenze00384003Simatic6ES5095-8MA03Simatic6ES5451-8MA11TelemecaniqueD65008BDSimatic6ES5465-4UA11LenzeE82EV152K4BASMWS1.2-375-420A-L10Simatic321-1EL00-0AA0AFCREV1A8100-0462Mc480-E00531-100EMSCIMR-XCBUA0P7EXATRON5000-397-BEXATRON6000-517-AAPPLIED0020-20113CORECOXR-M130-18300Deublin20403-340-302FUJIEG102CULEXAIR7901POWERTEC9J5-300-13ELIWELL280APCAP7911RENISHAWRGH22B50L00CURTISS5453J-S-1G-LHPE3611ASunMicrosystemsULTRA-320ADVANTECHPCM-9690FOREASX-200bxYASKAWASGDH-01BEhHP04085-66562AdvantechIPC-100-1UADVANTECHPCA-6276.NOVELLUS60-139978-00APPLIED23PN0100HEIDENHAIN369428-06ADVANTECHMIC-3301EGSGLQ-05-200ADVANTECHPPC-100WEBOIT-1000ADVANTECHPCM-9681AdvantechUNO-2105CBADVANTECHPCM-9361EGADVANTECHPCM-9362NCIKOLRXSG30BROOKS5964CAdvantechPCI-6881Interconnect8225-6000ADVANTECH1906064203SONYSDX-420CANORADPC-SERV-3APPLIED0150-09351LAM853-026078-025GEGL-4C35PHOTOMETRICS57-10FUJITSURM10S-SSMKAPARELPS4734-5CPIYU-191ASUN540-5559-01QUARTZDSS-450ACDS98044IPCC16BM-B1IPCC16BM-B1TELECT005-0005-0002NationalGPIB-SPRC-S.U.SINFICONFL-9496ADVANTECH271816AGILENTHFBR-762BApplied3540iTRENTONBPG6600HP16320-66551BROOKS6256MARVACA-20CorecoXR-M130-18306Lightwave3200MOXAED6008NAVITAR1-61448CARDPAC-SDD-02A-V2.0holdDell1950Dell1950ToshibaIK-M43ToshibaIK-M43GLENTEKSMC9915-1D-1GLENTEKSMC9915-1D-1VividCLV-401SEIKOSHAVP-4500SONYLIB-81DELTARPS-700-2Roper01-376-004APPLIED0150-12117APPLIED0150-09351PACKAK-BX551CADVANTECHAIMB-270-A1APPLIEDHT34-486PELCOERD97P21-UAML149-0831-30ADVANTECHPOD-6706APPLIED3870-02579DELTA603672-109ADVANTECH2A-1001USpellmanPTV5P300X2094BIRDDA-140/ADMKS290C-12272ADVANTECHPPC-60S-RT386HamamatsuR6095AdvantechUNO-2171-P12EAPCAP7998IWAKIFA-2E-SCISCO73-3903-08CISCOFE-511-K9AGILENTHFBR-712BPAPPLIED0240-75106AXIS8800-0033NANOMETRICS8200-0298XP4004-0006TOKYOCT0EE-T00499-1NEI702-1002-OQHPHDMP-1032KFXANTREX300-2HAMAMATSUF15014KLA-TENCOR0058069-000KeyenceMS2-H150XYCARB255860APPLIED0190-09900HOTFESTOCRVZS-20ACDSBRC22AAPPLIED0190-15137BALDORNB0258A00APPLIED3870-01471HPC7369-20821ADTRAN1202890E1ADVANTECHMIC-2000/8DELTA603437-104DANAHER30209DANAHER30051FISHER506DMPSSPSS811-1-LFADVANTECHISP-103AGILENTHFBR-772BEAPANTACDA-HDTV-SDIAdvantech6201ANORAD69080-LPDALSA-CORECOXP-2631KOLLMORGENEM19-28030-BC3CISCODS-SFP-FC8G-LW10-2459MellanoxMHGA28-ITCSCHAFFNERFN351H-64-33ADVANTECH5501ESIEMENSA9B10040657TOKYO3D10-202405-13ALLIED12-PORT)