liuweiele 发表于 2008-11-2 22:05:43

### 基于S3C2440丛SD卡启动WinCE(或其它程序)的实现 ###【恢复】

系统上电后,如果发现SD卡中有boot.ini文件,便按boot.ini文件中的指定参数运行,否则继续启动原系统:



http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_479641.jpg

 (原文件名:IMAG0118.jpg) 



http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_479642.jpg

 (原文件名:IMAG0120.jpg) 



http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_479644.jpg

 (原文件名:IMAG0108.jpg) 



本贴被 liuweiele 编辑过,最后修改时间:2008-11-02,23:18:43.

liuweiele 发表于 2009-1-24 23:15:34

大文件好难上传啊~速度好慢~

wswh2o 发表于 2009-1-15 11:38:35

都挺牛!

bowei181 发表于 2009-1-15 10:52:46

要是偷偷把WIN-CE传上来就更好了。呵呵!

lhyavr 发表于 2009-1-15 09:48:03

呵呵,真的很好很强大!!

liuweiele 发表于 2009-1-14 23:23:34

http://www.ourdev.cn/bbs/emotion/em040.gif

pl30508 发表于 2009-1-13 22:26:16

爱死你了

liuweiele 发表于 2008-12-16 12:56:40

赞同wenming 的意见.



有时候理论往往是不现实的.

实践才最有说服力.

watercat 发表于 2008-12-16 09:57:58

【85楼】 wenming

        恣意臆断出来的结论?我就是做矿上的工控出身的.我反而怀疑你是不是做电路的?还有,如果在要求高稳定的场合,我劝大家还是选择NOR.NAND最好不要用.



算了,我不想与你争吵.客户对我们的认可才是最重要的.我们所有的经验是从客户的反馈那里来的.不是随便猜测的.我来这个坛子里又不是做老师的,我说的话,你可以不听.但你吃过亏之后会就会明白的.



人的成长总要付出一些代价的.但也没有必要撞到头破血流才罢休.有时候还是多听一下别人的意见好.



最后一句,电路的稳定性不是靠忽悠出来的,而是需要付出心血. 



============================



貌似我一直在说关键数据用DataFlash是最好的选择吧?DataFlash内部逻辑采用NOR结构,得到较高的数据安全性;外部接口采用SPI,得到较高的传输稳定性,因此非常适合操作系统、应用程序和关键数据的保存,同时DataFlash的容量范围和普通NOR基本一致



但是类似图片、日常日志等非关键数据,如果也要用NOR来保存的话,就算不谈价格,容量也肯定跟不上(国内我还没见过64MB以上的NOR),就算容量同样不是问题,写入次数和写入速度也不可能够用;这种情况下,显然只有NAND结构的存储器适合使用,但普通的NAND芯片没有内置纠错,并且一旦关键块出现问题,替换起来也很辛苦,这种情况下,两片互为镜像使用的工业级SD卡并不是错误的选择



更何况,【两片互为镜像使用的工业级SD卡用于保存大量的历史数据及界面图片】这种用法,我在我做过的高压电塔和烟厂的项目都用过,至今没有发现问题



至于你说的情况,一方面,矿山应用的环境确实在工业环境中也算比较恶劣的;但另一方面,恐怕你也没有尝试过【两片互为镜像使用的工业级SD卡】的使用方案吧……如果拿普通电脑市场十几块钱1G的SD卡用在恶劣环境下,然后失败了就归罪于SD卡本身或电路的设计者,未免太偏颇了吧?

wenming 发表于 2008-12-16 08:01:25

恣意臆断出来的结论?我就是做矿上的工控出身的.我反而怀疑你是不是做电路的?还有,如果在要求高稳定的场合,我劝大家还是选择NOR.NAND最好不要用.



算了,我不想与你争吵.客户对我们的认可才是最重要的.我们所有的经验是从客户的反馈那里来的.不是随便猜测的.我来这个坛子里又不是做老师的,我说的话,你可以不听.但你吃过亏之后会就会明白的.



人的成长总要付出一些代价的.但也没有必要撞到头破血流才罢休.有时候还是多听一下别人的意见好.



最后一句,电路的稳定性不是靠忽悠出来的,而是需要付出心血.





本贴被 wenming 编辑过,最后修改时间:2008-12-16,08:16:05.

watercat 发表于 2008-12-16 01:33:32

【82楼】 liuweiele



        如果是在恶劣的工业控制环境下,关键数据和代码尽可能不要贮存在NandFlash类型的Memory中,既然使用了外扩SDRAM,用NorFlash会更合适.去年做过一个项目,最开始使用NandFlash,在做4000V的ESD测试中,大约有1/5的机率造成数据丢失;后来改用NorFlash,问题解决!



=============================



1、DataFlash内部采用NOR结构,避免了NAND常见的块错误,外部采用SPI接口,避免了常规NOR繁琐的总线连接,唯一的缺点是速度偏慢,但对于大多数应用来说不影响使用



2、外扩一片SDRAM是一回事,外扩SDRAM同时还要外扩NOR则是另一回事,总线上挂的东西越多,对工业环境的适应力就越差

miraclelife 发表于 2008-11-2 23:01:13

这个应该“酷”了

yin66 发表于 2008-11-2 22:59:38

mark



以后再回来看看

thriller 发表于 2008-11-2 22:54:35

记性不好,留个脚印

liuweiele 发表于 2008-11-2 22:43:28

如果,系统没有检测到SD卡或boot.ini文件参数配置错误,将会继续运行原系统:



http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_479782.jpg

 (原文件名:IMAG0137.jpg) 





本贴被 liuweiele 编辑过,最后修改时间:2008-11-02,22:43:55.

liuweiele 发表于 2008-11-2 22:31:01

运行在S3C2440上的目标文件(基于东华4.3寸TFT LCD( 480x272 )):



点击此处下载 ourdev_479721.rar(文件大小:176K) (原文件名:S3C2440目标文件.rar) 



本贴被 liuweiele 编辑过,最后修改时间:2008-11-02,22:31:22.

liuweiele 发表于 2008-11-2 22:25:00

主程序:

点击此处下载 ourdev_479701.rar(文件大小:2K) (原文件名:S3C2440_Main.rar) 

liuweiele 发表于 2008-11-2 22:22:49

int        FAT_RunFile(char *ini_dir)

{



        U32                a,b,i;

        

        U8                *Buf;

        U8                *LCD_Buf;

        char        str_buf;

        char        dir_buf;

        char        *Str=str_buf;

        char        *dir=dir_buf;

        struct        FileInfoStruct        File_Info;

        ////

        

        

        

        i=FAT_OpenFile(ini_dir,&File_Info);

        if(i==1)

        {

                Uart_Printf(0,"FAT Load '%s' Err!\n",ini_dir);        //文件打开失败.

                

        //        GUI_LabelPrintf(40,LCD_YSIZE>>2,LCD_XSIZE-40*2,40,RGB565(31,0,0),RGB565(24,48,0),RGB565(10,20,10),Center,Font_ASC_8_16,"Open '%s' Err!",dir);

        //        Uart_Getch(0);

                return 0;

        

        }

        ////

        

        

        Uart_Printf(0,"FAT Load '%s' Size=%d,Start Cluster=%d.\n",File_Info.Size,i);

        ////

        Buf=malloc(File_Info.Size);

        

        if(Buf==0)

        {

                Uart_Printf(0,"Load File:'%s';APP RAM Err!\n");

                return        0;

        }

        ////

        

        FAT_DirLoadFile(ini_dir,Buf);                //加载 ini文件.

        a=0;

        

        while(1)

        {

                if(Buf=='\n')        break;        

                if(Buf==' ')                break;

                

                dir=Buf;

                a++;

                

        

        }



        dir[--a]='\0';

        ////

        



        for(a=0;Buf!='@';a++);

        

        a++;

        b=0;

        while(1)

        {

        

        if(Buf=='\n')        break;

        if(Buf==' ')                break;

        if(b==8)                        break;

        ////

        Str=Buf;

        

        }

        Str='\0';

                

        

        i=strtol(Str,NULL,16) ;

        

        Uart_Puts(0,dir);

        Uart_Printf(0," Read RAM=%X\n",i);

         

        a=FAT_OpenFile(dir,&File_Info);

        if(a==1)

        {

                Uart_Printf(0,"Open '%s' Err!\n",dir);

                Uart_Printf(0,"Start Cluster=%d\n",a);

                return 1;

        

        }

        ////

        Uart_Printf(0,"Size=%d;Start Cluster=%d.\n",File_Info.Size,a);

        

        FAT_DirLoadFile(dir,(U8 *)i);

        

        Uart_Printf(0,"Start Run to:0x%08X.\n",i);

        Run_Address(i);



        return 1;



}

liuweiele 发表于 2008-11-2 22:20:53

void        Find_SystemFile(char *dir)

{

        

        struct        FileInfoStruct        File;

        ////

        /*

                

        if(!SDI_Init())                        return;

        if(FAT_Init())                        return;

        */

        

        if(FAT_OpenFile(dir,&File)==1)

        

        {        

                Uart_Printf(0,"Open '%s' Err!!!\n",dir);

                return;

        }

        ////

        

        GUI_LabelPrintf(40,(LCD_YSIZE>>1)-40,LCD_XSIZE-40-40,60,RGB565(28,56,0),RGB565(0,0,0),RGB_Tran,Center,Font_ASC_8_16,"找到系统文件:'%s'.系统将丛SD卡启动,请等候...",dir);

                

        FAT_RunFile(dir);

        

        ////

        





}

本贴被 liuweiele 编辑过,最后修改时间:2008-11-02,22:48:51.

liuweiele 发表于 2008-11-2 22:19:13

boot.ini文件内容:



http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_479681.jpg

 (原文件名:25.jpg) 

liuweiele 发表于 2008-11-2 22:13:22

SD卡中的WINCE映像和自启动配置文件:



http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_479661.jpg

 (原文件名:23.jpg) 



http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_479662.jpg

 (原文件名:24.jpg) 

nosaylove 发表于 2008-11-24 09:25:20

mark.不懂arm

liuweiele 发表于 2008-11-24 09:12:38

这个4.3寸LCD也是个好东西

aduc812 发表于 2008-11-24 08:48:37

2440是个好东西

dlham 发表于 2008-11-24 01:24:19

顶起来

liuweiele 发表于 2008-11-3 23:48:03

Re:【26楼】 teencole 茶叶and可乐 

不要改bootloader,只要提供原来的nk.nb0就行.

fujinggui 发表于 2008-11-3 23:46:24

hao

teencole 发表于 2008-11-3 21:58:55

强.不懂,请问要不要改bootloader?

gaoqiru 发表于 2008-11-3 21:30:15

留个记号,有空研究一下

liuweiele 发表于 2008-11-3 14:40:58

这个GUI目前还不是很完善,暂时不支持多任务.

本贴被 liuweiele 编辑过,最后修改时间:2008-11-03,14:42:32.

ps51 发表于 2008-11-3 13:31:46

后面的那个GUI很漂亮,要是能公布源码多好。

liuweiele 发表于 2008-11-3 11:27:59

等以后有时间了,再弄个Linux玩玩../emotion/em020.gif

ghosthd 发表于 2008-11-3 09:18:00

很好很强大

liuweiele 发表于 2008-11-3 09:03:47

【17楼】 hexenzhou 

这个不需要另外的nboot.

huayan 发表于 2008-11-3 08:42:00

谢谢,虽不懂,帮顶

holged 发表于 2008-11-3 08:27:15

记号

hexenzhou 发表于 2008-11-3 08:19:37

这个不用修改NBOOT吗?

zxq6 发表于 2008-11-3 00:56:23

谢谢。

liuweiele 发表于 2008-11-3 00:37:50

呵呵,本人在本网站也获得了不少的好资料,理应是也应该贡献一点../emotion/em025.gif

本贴被 liuweiele 编辑过,最后修改时间:2008-11-03,00:38:13.

jimo 发表于 2008-11-3 00:20:32

太酷了

yaya001 发表于 2008-11-3 00:05:35

mark

armok 发表于 2008-11-2 23:50:46

Cool !



谢谢liuweiele 的无私贡献。./emotion/em108.gif

jiangjx 发表于 2008-11-2 23:47:06

hao

Embedtech 发表于 2008-12-16 01:01:55

对于9G20我以前考虑过的方案是2~8MB NORFlash+16MB SDRAM的方式,当然也从NOR启动,但后来放弃了.目前可以重新考虑.至于LCD的问题,受EPSON委托,测试他LCD控制器的性能,或者说是给他做的一个插件.同时谢谢各位的建议.

liuweiele 发表于 2008-12-16 00:29:15

如果是在恶劣的工业控制环境下,关键数据和代码尽可能不要贮存在NandFlash类型的Memory中,既然使用了外扩SDRAM,用NorFlash会更合适.去年做过一个项目,最开始使用NandFlash,在做4000V的ESD测试中,大约有1/5的机率造成数据丢失;后来改用NorFlash,问题解决!

watercat 发表于 2008-12-15 23:17:47

个人觉得,做MCU核心板,最忌讳的就是总线外引,类似9263这种双外部总线的器件还算好点,普通单外部总线的东西,一旦需要总线外引,那要折腾的可就不是一点两点了……等长、电容和阻抗控制、锁存器……而且一旦出了问题,整个系统就准死无疑了……所以如果你的系统确实需要LCD接口,请认真考虑用9263而不是9G20,毕竟扩展串口很容易,扩展LCD就实在是给自己找麻烦了……

watercat 发表于 2008-12-15 23:09:12

【78楼】 Embedtech 陇东大少        版权的问题到是没有,关键的问题是目前图纸还没设计完,还没到拿出来让大家挑毛病的时候。MobileSDRAM我考虑过,但没有用的原因是工业级的不好定货;目前EPSON公司给了几片S1D13513,在9G20的底板上给他驱动,还在画图中。==========================1、普通SDRAM也无所谓,不过尽量用BGA的吧,反正主片已经是BGA了,多一片无所谓,而BGA封装其实比TSOP封装更能耐受恶劣环境的,另外需要再重申的就是,无论如何,能用16位就尽量不要用32位2、S1D13513…………你不如索性把CPU换9263算了……

watercat 发表于 2008-12-15 23:04:33

【77楼】 wenming        如果在工业现场使用SD卡,或者MICROSD卡,那家伙肯定是傻瓜.===================然而就我的使用经验,这东西其实很可行,而且比焊接式的NANDFlash更好用当然,有几条必须要保证的1、卡座用全金属弹出式卡座,同时卡座下方做地线敷铜并与卡座外壳连接2、品牌选对3、可能的情况下,用两片卡做RAID-14、不能用SD卡作为根文件系统,并在驱动程序中增加在必要时对SD卡进行复位的代码5、无论怎么说,工业现场也是有种种不同情况的,强干扰环境算一种工业现场,而高温或剧烈温度变化也算一种工业现场,显然,SD卡对前者的适应能力远高过后者,更何况,SD卡也同样有适应宽温度范围的工业级产品,所以认为“在工业现场使用SD卡,或者MICROSD卡,那家伙肯定是傻瓜”的人,恐怕是根本没经过实践就恣意臆断出来的结论吧……

本贴被 watercat 编辑过,最后修改时间:2008-12-15,23:21:40.

dairain 发表于 2009-3-5 13:10:18

請問你用的2440板子是不是mini2440?

liuweiele 发表于 2009-3-5 21:55:58

是Mini2440

kingofkings 发表于 2009-3-6 00:43:35

以下蓝色文字由版主:kingofkings 于:2009-03-06,00:43:35 加入。<font color=black>请发贴人注意:本贴放在这分区不合适,即将移走
原来分区:AVR (原ourAVR.com) 技术论坛
即将移去的分区:ARM技术论坛
移动执行时间:自本贴发表0小时后
任何的疑问或咨询,请可随时联系站长。谢谢你的支持!</font>

superyongzhe 发表于 2009-3-7 15:13:25

东西虽好却无源码。

frozenstar 发表于 2009-3-7 17:06:18

mark,哈

liuweiele 发表于 2009-3-9 00:52:15

不知【51楼】 superyongzhe 最后的骑士 所说的源码是指.....?

luzhengmao 发表于 2009-3-9 02:56:09

这功能很简单亚

我们公司产品上用的就是差不多的技术。

其实没啥大的难度。

usb sd 更新系统。boot 超过4k也很容易实现。

liuweiele 发表于 2009-3-9 09:18:20

是的,就和普通的Nboot原理差不多~

luzhengmao 发表于 2009-3-10 00:48:53

单个boot load 超过4k有个小技巧,计算自身size 把自身完整考到RO 的地址。

再加上 3星给的sample code 实现 usb 下载

再移植1个sd 卡fat 的功能。

好像现在这样功能的boot都不愿意公开了。

过段时间,我公开1个算了。

pinocchio 发表于 2009-3-10 08:56:36

mark

ShawnLinson 发表于 2009-4-9 19:48:16

留个爪印

ShawnLinson 发表于 2009-4-9 19:48:16

留个爪印

lisuweizhai 发表于 2009-4-10 00:21:36

向楼主学习

liuweiele 发表于 2009-4-10 00:48:13

【60楼】 lisuweizhai ,目前还在弄OS吗?

valley 发表于 2009-4-10 01:13:07

有问题:
1、支持的SD FS是?
2、bios能从nand启动么?

luzhengmao 发表于 2009-4-10 06:18:32

我们产品
boot 支持fat16 fat32
能从nand boot

valley 发表于 2009-4-10 09:10:48

fat12不支持?

luzhengmao 发表于 2009-4-10 11:19:03

支持

liuweiele 发表于 2009-4-10 11:54:42

FAT12就完全没必要做了

loongsuns 发表于 2009-4-14 14:29:54

mark下收藏 慢慢学习

delaner 发表于 2009-4-14 15:33:49

mark

liuweiele 发表于 2009-4-24 00:15:32

前不久研究出了一个更有意思的玩法,等我有空了再发贴公布. ./emotion/em025.gif

ooxxooxx 发表于 2009-4-24 15:48:10

mark

holy 发表于 2009-4-27 17:15:28

不错

honami520 发表于 2009-4-27 17:28:37

这个黄金圣斗士很牛逼啊!!!!!!!!

liuweiele 发表于 2009-4-27 20:04:16

LS也认识Gold Saint?

ShawnLinson 发表于 2009-4-27 20:56:26

处女座的沙加,睁开眼睛的时候基本上就是对手见哈迪斯的时候了
号称是最接近神的人了
LZ着实强悍,pfpf

liuweiele 发表于 2009-4-28 00:03:07

LS是圣迷!

ShawnLinson 发表于 2009-4-28 08:46:20

hoho,谢谢:)
动漫的爱好者,现在无聊还会看看圣斗士
说不定哪一天粘了雅典娜的血,就不用奋斗了,O(∩_∩)O哈哈~

lovecsu 发表于 2009-5-4 16:39:04

哈哈,mark,在学习arm

153290557 发表于 2009-5-10 08:52:21

呵呵~~这下有着落了!
我还愁我的2440 SD卡启动哪找去,,拿来主义

不过刚才看了下,代码不全,文件系统呢?
我也在整BOOT,用友善的BOOT然后加上UCGUI的一些功能就OK了!

楼主源码贴全啊,!就给了主程序。

你用的是自己写的GUI还是移植过来的?

楼主用的CE5.0还是6.0的?
我用的是6.0试用版不知道试用版跟正式有什么不同。。

lk546 发表于 2009-5-21 17:32:07

牛人啊,标记先!

liuweiele 发表于 2009-5-21 22:15:43

S3C2450可以直接丛SD卡启动

FREEXP 发表于 2009-5-23 21:02:54

系统上电后,如果发现SD卡中有boot.ini文件?

请问有什么前提吗?如在哪里烧什么代码?

XINXIZHENG 发表于 2009-8-10 08:51:36

楼主你好,能否把你的fat16文件系统和sd卡驱动的代码也共享一下啊,谢谢了。xinxizheng@163.com

yanyi103 发表于 2009-9-4 11:18:10

标记中

gooogleman 发表于 2009-9-10 11:59:51

这个太强了,很有意思。收藏了。

periscope 发表于 2009-9-10 14:03:52

很好,下次研究

lstone 发表于 2009-10-10 21:11:20

发现的楼主的sd启动方式不识别SDHC规范的高速卡?

liuweiele 发表于 2009-10-10 23:07:07

不是SD卡驱动程序的问题,是FAT文件系统上有个小Bug.

lstone 发表于 2009-10-10 23:31:09

在楼主的代码里,
Chk_SD_OCR 这个函数只识别 (rSDIRSP0==0x80ff8000) ,不识别 SDHC的 0xc0ff8000,所以sdhc的卡这个boot不工作,fat文件系统没有仔细研究,不过在sd规范的sd卡上好像可以用。

liuweiele 发表于 2009-10-11 01:18:54

这个我倒没太注意,因为一直都在使用常规SD卡.

52robot 发表于 2009-10-11 09:52:13

【88楼】 lstone
你SD卡启动后在WinCE找不到SD卡这个问题怎么解决的?

lstone 发表于 2009-10-11 10:13:18

回答【90楼】 52robot
在ce的sd卡驱动里修改sd的寄存器SDICON,正常应该是0x0,用这个boot用sd卡启动是0x10 ,改回去0x0 就行了。

如果有弟兄搞过sdhc规范的sd启动或者升级的话指点一下。

qingzhou 发表于 2009-10-13 01:48:58

记号

7700006 发表于 2009-10-16 19:03:34

先mark

cunzhang 发表于 2009-12-22 11:46:39

楼主你好!我也在研究用SD卡启动,但是我不明白的一点:你的这个S3C2440_Main.c的代码在加电时怎么被执行起来的?因为执行起来才能达到找SD卡中的Boot.ini文件,根据ini文件找nb0文件,去启动它啊?

也就是说,CPU加电是,它开始执行的是什么,怎么到你这个S3C2440_Main.c的Main()里的?

alexmayer 发表于 2009-12-23 09:55:46

牛人,太帅了。

moon0213 发表于 2010-1-22 15:10:41

牛!mark

kinggao 发表于 2010-1-25 15:58:27

好 有时间也学习

moon0213 发表于 2010-2-1 17:43:47

mark

castle911 发表于 2010-2-4 09:39:19

mark
页: [1] 2
查看完整版本: ### 基于S3C2440丛SD卡启动WinCE(或其它程序)的实现 ###【恢复】