基于S3C2410A的WINCE下Stepldr程序移植详细分析[二]

裸奔程序7(一)-NAND芯片的读写及ECC检验软硬件实现 对TQ2440上NAND芯片的读写进行了分析,同时对ECC检验算法进行了彻底的研究,对S3C2440中NAND控制寄存器进行了深入研究,对ECC校验进行了软实现和S3C2440上的硬实现。 阅读详情

前面分析STEPLDR.BIB文件,现在分析的是NAND FLASH驱动部分。至于startup.s文件,主要是进行初始化:看门狗。配置MPLL和UPLL以及待机和休眠。还有的就是上电,还是复位等,在移植到STEPLDR到S3C2410A的时候需要修改的地方就是NAND FLASH驱动部分,代码如下:

; NAND code...
;
A410_BASE_ADDR EQU 0x2000000

 MACRO
 LDR4STR1 $src,$tmp1,$tmp2 
 ldrb $tmp1,[$src]
 ldrb $tmp2,[$src]
 orr $tmp1,$tmp1,$tmp2,LSL #8
 ldrb $tmp2,[$src]
 orr $tmp1,$tmp1,$tmp2,LSL #16
 ldrb $tmp2,[$src]
 orr $tmp1,$tmp1,$tmp2,LSL #24
 MEND

 EXPORT __RdPage512
__RdPage512
 ;input:a1(r0)=pPage
 stmfd sp!, {r1-r11}

 ldr r1, =0x4E00000C  ;NFDATA
 mov r2, #0x200
1 
 LDR4STR1 r1, r4, r3
 LDR4STR1 r1, r5, r3
 LDR4STR1 r1, r6, r3
 LDR4STR1 r1, r7, r3
 LDR4STR1 r1, r8, r3
 LDR4STR1 r1, r9, r3
 LDR4STR1 r1, r10,r3
 LDR4STR1 r1, r11,r3
 stmia r0!, {r4-r11}
 subs r2, r2, #32
 bne %B1

 ldmfd sp!, {r1-r11}
 mov pc, lr

这段代码是已经修改过的在S3C2410A可以正常运行的CODE。直接复制到S3C2440A的Stepldr下的startup.s覆盖这段代码即可。这是因为S3C2410A的寄存器和S3C2440A的寄存器不一样引起的问题。上面这段代码是直接可以用滴。

下面来移植S3C2410A的NAND FLASH的STEPLDR驱动吧:

#define NF_CMD(cmd)    {rNFCMD=cmd;}
#define NF_ADDR(addr)   {rNFADDR=addr;} 

// for S3C2410aNAND
//  For flash chip that is bigger than 32 MB, we need to have 4 step address
#define NEED_EXT_ADDR               1

#define NF_nFCE_L()    {rNFCONF &= ~(1<<11);}
#define NF_nFCE_H()    {rNFCONF |=  (1<<11);}
#define NF_RSTECC()    {rNFCONF |=  (1<<12);}

#define NF_MECC_UnLock()  {do{}while( 0 );}
#define NF_MECC_Lock()   {do{}while( 0 );}

#define NF_CLEAR_RB()   {rNFSTAT |=  (1 << 2);}
#define NF_DETECT_RB()   {while(!(rNFSTAT&(1<<0)));}
#define NF_WAITRB()       {while(!(rNFSTAT&(1<<0)));}


#define NF_RDDATA()    (rNFDATA)
#define NF_WRDATA(data)   {rNFDATA=data;}

#define NF_ECC()         (rNFECC)

#define ID_K9S1208V0M   0xEC76

// HCLK=133Mhz
#define TACLS  7
#define TWRPH0  7
#define TWRPH1  7

typedef union _ECCRegVal
{
 DWORD dwECCVal;
 BYTE bECCBuf[4];
} ECCRegVal;


void __RdPage512(BYTE *bufPt);


int NF_ReadPage(UINT32 block,UINT32 page,UINT8 *buffer)
{
    volatile int i;
    register UINT8 * bufPt=buffer;
    unsigned int blockPage;
// ULONG MECC;
    BYTE   ecc0,ecc1,ecc2;
    ECCRegVal eccRegVal;
 

    blockPage=(block<<5)+page;

    NF_RSTECC();    // Initialize ECC
   
    NF_nFCE_L();   
    NF_CMD(0x00);   // Read command
    NF_ADDR(0);     // Column = 0
    NF_ADDR(blockPage&0xff);     //
    NF_ADDR((blockPage>>8)&0xff);   // Block & Page num.
    NF_ADDR((blockPage>>16)&0xff);  //

    for(i=0 ; i<50 ; i++); //wait tWB(100ns)
   
    NF_WAITRB();    // Wait tR(max 12us)

    __RdPage512(bufPt);

 eccRegVal.dwECCVal = NF_ECC();
 
 // Skip first 8 bytes
 for(i=0; i<8; i++)
 {
  ecc0 = NF_RDDATA(); //必须保留读取8个字节,这里是OEM配置用途
 }

 ecc0 = NF_RDDATA();
 ecc1 = NF_RDDATA();
 ecc2 = NF_RDDATA(); 
 
 NF_nFCE_H();

 if( ecc0 != eccRegVal.bECCBuf[0] ||
  ecc0 != eccRegVal.bECCBuf[0] ||
  ecc0 != eccRegVal.bECCBuf[0] ) {
 // Uart_SendString("ECC mismatch for Sector: ");
 // Uart_SendDWORD(blockPage, TRUE);
 }

 return 1;

} //由于NAND FLASH在生产时,必须确保BLOCK0是OK滴。同时在引导时,是不需要校验ECC。因此。不做ECC校验。


void NF_Reset(void)
{
    volatile int i;
  
    NF_nFCE_L();

    NF_CMD(0xFF);              // reset command.

    for(i=0 ; i<10 ; i++);     // tWB = 100ns.

    NF_WAITRB();               // wait 200~500us.
    
    NF_nFCE_H();
}


void NF_Init(void)
{

    rNFCONF =  (1  << 15) | /* Enable/Disable      */
    (1   << 14) | /* Page Size : 512Bytes      */
    (1   << 13) | /* 4 Step Address        */
    (1   << 12) | /* Initialize ECC        */
    (1   << 11) | /* nFCE control nFCE = HIGH     */
    (TACLS  <<  8) | /* CLE & ALE = HCLK * (TACLS + 1)   */
    (TWRPH0 <<  4) | /* TWRPH0    = HCLK * (TWRPH0 + 1)   */
    (TWRPH1 <<  0);
    NF_Reset();
}

上面这段代码是直接可以在S3C2410A的stepldr中用滴。已经在我的开发板上实现了滴。

开源并兼容Windows NT的操作系统ReactOS简介 ReactOS是一个基于 Windows NT 架构(Windows XP, Windows 7, Windows Server 2012 等均基于 Windows NT 架构)设计原则的开源操作系统。由于所有的代码都经过重新编写,ReactOS 并不是一个基于 Linux 的操作系统,而且不包含任何 UNIX 架构。 阅读详情

相关推荐

基于S3C2410A的WINCE平台下Stepldr程序移植分析与编程

通过创建WINCE工程、配置编译选项、引入Stepldr源代码、配置平台相关文件、编写初始化代码和启动代码等步骤,可以实现Stepldr程序在目标硬件平台上的移植。需要注意的是,本文仅提供了一个基本的移植示例,实际的移植过程可能涉及更多的细节和配置。在进行实际的移植项目时,建议参考相关的文档和资料,以确保移植过程的顺利进行。本文将详细介绍基于S3C2410A处理器的WINCE平台下Stepldr程序的移植过程,并提供相应的源代码。在进行Stepldr程序移植时,需要根据具体的硬件平台进行相关文件的配置。

DevScribe的博客 241

嵌入式ARM中常用的汇编指令讲解

在介绍之前,先把ARM中常见的寄存器及其别名截图,如下: 其中的r1,r2,r3常用作传递参数,r4至r11保存局部变量,r13常用作数据栈指针,别名sp;r14寄存器称作连接寄存器,别名lr,常用保存子程序返回地址;寄存器r15是程序计数器,别名pc (1)相对跳转指令:b、bl 这俩条指令的不同之处在于bl指令除了跳转之外,还将返回地址(bl的下一条指令的地址)保存...

Rookie Linux的博客 3430

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

STEPLDR启动程序分析

<br />     STEPLDR是用来加载EBOOT的,即引导EBOOT的启动。STEPLDR主要包括两部分:StartUp.s 与 main.c,StartUp.s 主要是初始化CPU,引导EBOOT的功能主要在main.C中完成,该部分结构和代码都比较简单,代码如下:<br />void main(void) { register nBlock; register nPage; register nBadBlocks; volatile unsigned c

figthter_cui的专栏 2474

国央企创新负责人如何快速掌握本地科技资源分布与匹配情况?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

基于stm32开发的红外循迹小车

2.L298N电机驱动模块:分别是5V,12V,GND,可以通过外加电源给驱动模块供电,IN1,IN2,IN3,IN4,EN1,EN2,通过给IN口不同的电平,可以达到控制电机正反转,EN口为使能口,可以通过给EN口不同的PWM波,来达到控制小车速度,1.红外循迹模块:检测黑线的原理是向外发射红外线,当没有遇到黑线的时候,返回回来,之后返回高电平,当遇到黑线的时候,红外被吸收,返回高电平,读取相应IO口的电平就可以知道小车此时的大致位置;模块有四个输入接口,分别连接四个TT马达,驱动小车运动;

2301_81374681的博客 1万+

WINCE6.0+SLC ECC产生和校验 .

原创地址:http://blog.youkuaiyun.com/loongembedded/article/details/24176643

MJL007的专栏 1490

工业自动化中气动夹爪选型、调试与维护全流程实战解析

在工业自动化领域,气动执行元件是实现精准抓取与搬运的基础。其工作原理是通过压缩空气驱动气缸,转化为直线或旋转运动,从而控制夹爪的开合。这类技术因其结构简单、响应快速、成本低廉及维护方便,在自动化产线中具有极高的技术价值,是实现高效、可靠物料搬运的核心单元。其典型应用场景涵盖电子装配、汽车制造、食品包装等行业的上下料、分拣与定位工序。本文以工业自动化中常见的二指平行气动夹爪(常被工程师代号化为“Gripper-A”)为例,深入剖析其从硬件选型、气动系统集成到程序逻辑联锁的完整工程实践。内容聚焦于夹持力计算中惯

weixin_42629671的博客 366

基于S3C2410A的WINCE下Stepldr程序移植详细分析

在SAMSUNG公司提供的S3C2440A的BSP中有一个Stepldr引导程序。现在我把它移植到S3C2410A上了,已经移植成功。需要修改的地方就是NAND FLASH驱动部分,因为S3C2410A的NAND FLASH寄存器和S3C2440A的NAND FLASH寄存器是有点不一样滴。相比较而言:S3C2440A的NAND FLASH的寄存器丰富一些。而S3C2410A的就比较少。不说废话了

天道酬勤,恒者能胜 1078

JavaScript 书签脚本实战:腾讯/优酷/爱奇艺等5大视频站m3u8链接一键提取

本文详细介绍了如何使用JavaScript书签脚本一键提取腾讯视频、优酷、爱奇艺等五大视频平台的m3u8流媒体链接。通过分析播放器内部对象结构,开发者可以高效获取视频源文件,避免录屏画质损失。文章包含各平台适配方案、实战增强功能开发及企业级解决方案设计,帮助用户快速掌握这一实用技术。

weixin_27945229的博客 610

手把手教你用PLECS仿真BUCK数字电源(含DSP代码实现)

本文详细介绍了如何利用PLECS仿真软件与Visual Studio 2022搭建高保真数字电源开发环境,手把手指导从BUCK电路建模、编写硬件感知的C控制算法到参数调优的全过程。重点阐述了通过DLL接口实现软件在环仿真,模拟DSP的ADC/PWM时序,并将验证后的代码无缝迁移至TI C2000系列DSP,构建从仿真到固件的完整数字电源开发闭环,显著提升开发效率与一次成功率。

oo7890的博客 396

基于S3C2410A的WINCE下Stepldr程序移植详细分析[一]

在SAMSUNG公司提供的S3C2440A的BSP中有一个Stepldr引导程序。现在我把它移植到S3C2410A上了,已经移植成功。需要修改的地方就是NAND FLASH驱动部分,因为S3C2410A的NAND FLASH寄存器和S3C2440A的NAND FLASH寄存器是有点不一样滴。相比较而言:S3C2440A的NAND FLASH的寄存器丰富一些。而S3C2410A的就比较少。不说废话了。说正文,先分析一下Stepldr.bib文件吧:;; Copyright (c) Microsoft Corp

嵌入式与人工智能天地 1668

点云目标检测:open3d多窗口联动可视化

多个模型之间的对比除了指标之外,还需要可以直接直观的对比可视化结果,这次介绍一下如何使用open3d同时打开两个窗口分别加载两个模型的结果进行对比,同时实现两个窗口的联动,也就是当一个窗口拖动或者缩放时另外一个窗口也跟着做同样的变换。

zhaoguanhua的博客 4688

基于S3C2410A的WINCE下Stepldr程序移植详细分析[三]

#include #include #include #include "option.h"#include "s2410addr.h"// Constants.//#define LED_ON                 0xA#define LED_OFF                 0x0#define NAND_BLOCK_SIZE_BYTES   0x00004000#define NAND_PAGE_SIZE_BYTES    0x00000200#define NAND_PAGES_P

嵌入式与人工智能天地 1458

AI编程工具到底是初学者的绊脚石还是垫脚石?

现在是AI时代,我们要做的,是学会拥抱AI、使用AI,成为AI的驾驭者,如果你因为害怕使用AI学不到东西,那么大可不必,因为AI必然是今后的趋势,相信会用AI在今后的求职面试中也会有很大的占比。另外我之前写了多篇有关AI编程开发工具Trae的使用技巧和教程,需要的话你可以关注公众号后通过菜单栏获取。另外我也把所有Trae相关的文章整合到了腾讯ima知识库,感兴趣的可以关注公众号以后回复。

cpp加油站的专栏 185

OpenHarmony开发一个App,安装到BearPi-HM Micro开发板

建议先阅读我们这篇,这里面详细介绍了,以及hap包安装的全过程。本篇是介绍如何开发一个App,然后安装到开发板上,比如hap包,无法安装等问题。

Halifax 1030

Wince stepldr代码解析

Wince  stepldr代码解析 Wince系统启动之后最开始执行的代码就是stepldr,当然stepldr之前还有一段汇编,这里着重讲stepldr,stepldr又分为两个部分,Stepldr_NAND和Stepldr_SD,顾名思义,Stepldr_NAND为从nand启动的stepldr引导,Stepldr_SD为从SD启动的stepldr引导。先说Stepldr_NAND,Ste

broadCE的专栏 832

FFmpeg入门详解之110:RTSP协议讲解

TCP/IP 协议体系中的一个应用层协议,该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。HTTP与RTSP相比,HTTP传送HTML,而RTSP传送的是多媒体数据。正在上传…重新上传取消RTSP是基于文本的协议,采用ISO10646字符集,使用UTF-8编码方案。行以CRLF中断(\r\n:10,13:0x0A,0x0D),包括消息类型、消息头、消息体和消息长。

福优学苑@音视频+流媒体 2529

我也来分析Windows CE stepldr源码----基于Windows CE 5.0 S3C2440 BSP

一、nboot与stepldr:国内很多人做WinCE都是使用Samsung的2410或者2440入门的,所以对nboot和eboot是最熟悉的。eboot是微软在WinCE里面提供的开放源代码的一个bootloader的框架,因为它默认的是使用ethernet从PC下载image而得名,使用该框架,根据自己的硬件做一些修改就可以直接拿来用了,那么nboot又是怎么回事呢? 之所以需要

jjunjoe的专栏 1813

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Windows 7专业版安装VS2005与WinCE6.0开发环境

近期更新了自己的小黑从XP更新到WIN7专业版,我花了两天时间验证了下列软件安装在WIN7 PRO是完全兼容的。 1:2011年最新更新的SourceInsight3.50.0066版本,这个是支持WIN7 PRO [已经验证] 2:PADS9.2也是支持WIN7 PRO [已经验证] 3:Cadence16.2也是支持WIN7 PRO [已经验证] 4:Altium Designer v

嵌入式与人工智能天地 8220

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Keyboard驱动介绍

一.Keyboard Driver的加载过程          系统启动过程中,GWES注册表HKEY_LOCAL_MACHINE/Hardware/DeviceMap/KEYBD 下的”Drivername”下去获取Keyboard Driver的名字,如果没找到,则使用默认的名字Keybddr.dll。          加载的大概过程如下:          首先GWES会去验证Key

嵌入式与人工智能天地 4207

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

S3C2410支持64M到1GB的NAND FLASH

参考其它的ARM的NAND FLASH驱动,发现别人的NAND FLASH是采用一个表格来检测不同的NAND FLASH,现在已经移植到S3C2410中了。测试也是OK滴。。。只测试过64M的NAND FLASH,我想1G也是差不多滴,只需要看看SPEC。就知道怎么去做了。这是S3C2410下的NAND FLASH驱动表格:#define BW_X08                              0#define BW_X16                              1#de

嵌入式与人工智能天地 1602

S3C2440之NAND FLASH移植到S3C2410的驱动分析[一]

S3C2440A的NAND FLASH驱动移植到S3C2410还是有些不一样的,最主要的这两个IC的NAND FLASH的寄存器有些不一样,请看下面的两者之间不同: // // Copyright (c) Microsoft Corporation. All rights reserved. // // // Use of this source code is subject to the

嵌入式与人工智能天地 1563

EBOOT的USB驱动可以正常检测了[S3C2410A芯片]

<br />下面是在DNW工具中打印出来的信息:<br /><br />EP0 Interrupt<br />INFO : IsrUsbd : Interrupt occurred <br />INFO : s2440INT->SRCPND = 0x2000008 <br />INFO : s2440INT->INTMSK = 0xFDF7FFFF <br />INFO : s2440INT->INTPND = 0x2000000 <br />INFO : s2440PWR->CLKCON = 0xFFFF

嵌入式与人工智能天地 1291
上一篇: 基于S3C2410A的WINCE下Stepldr程序移植详细分析[一]
下一篇: 基于USB枚举过程的详细分析
wang-bob
博客等级 码龄20年 356粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值