omap3530如何将wince镜像写入nand flash 驱动

当前位置: →
→ OMAP3530+ov3640,ISPCCD寄存器设置解决办法
OMAP3530+ov3640,ISPCCD寄存器设置解决办法
& 作者:佚名 & 来源: 互联网 & 热度:
&收藏到→_→:
摘要: OMAP3530+ov3640,ISP、CCD寄存器设置?OMAP3530+wince下,调试OV3640,图像花屏,而且只占屏幕的上部约1/4。ov3640设置为640*...
"OMAP3530+ov3640,ISPCCD寄存器设置解决办法"::
omap3530+ov3640,isp、ccd寄存器设置?omap3530+wince下,调试ov3640,图像花屏,而且只占屏幕的上部约1/4。ov3640设置为640*480 yuv422模式,且该设置在s5pv210下验证了。数据流:sensor(yuv422)==&isp==&ccdc==&memory我的isp和ccd设置如下:isp_sysconfig =0x1001isp_ctrl =0x9810ctctrl_ctrl =0x9isp_irq0enable =0x0ccdc_syn_mode =0x31700ccdc_pcr =0x1ccdc_horz_info =0x27fccdc_vert_start =0x0ccdc_vert_lines =0x1dfccdc_cfg =0x8000ccdc_horz_info =0x27fccdc_vert_start =0x0ccdc_hsize_off =0x500ccdc_sdofst =0x0ccdc_sdr_addr =0xccdc_vdint =0x1df0000ccdc_alaw =0x4ccdc_fmtcfg =0x4000ccdc_fmt_horz =0x0ccdc_fmt_vert =0x0ccdc_vp_out =0x0rsz_pcr =0x4rsz_cnt =0x3fcffrsz_out_size =0x0rsz_in_start =0x0rsz_in_size =0x0rsz_sdr_outadd =0x0rsz_sdr_outoff =0x0------解决方案--------------------
留个邮箱吧,我到时发个驱动给你,ov的 搜索此文相关文章:此文来自: 马开东博客
网址: 站长QQ
上一篇:没有了
OMAP3530+ov3640,ISPCCD寄存器设置解决办法_WinCE相关文章
WinCE_总排行榜
WinCE_最新
WinCE_月排行榜
WinCE_周排行榜
WinCE_日排行榜博客访问: 36074
博文数量: 6
博客积分: 175
博客等级: 入伍新兵
技术积分: 99
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
硬件环境: 采用TI omap3530的天漠科技开发板和公司的板卡。软件环境: 天漠科技开发包:
* linux kernel: 2.6.29-sbc8100
* u-boot-1.3.3
* x-load-1.41 后续移植linux-omap:
* linux kernel: 2.6.38作者:agan联系邮箱 .cn转载须注明出处!内容简介:描述调试过程中所遇问题及其解决办法和过程,可作为新手的FAQ使用。1. Issue: 不能从SD卡启动。& &Fixed: 自己疏忽造成,手册已经提到要先用"HP Disk Storage Format Tool"格式化SD卡。2. Issue: 烧写的Xload不能启动。& &Fixed: ECC格式不对造成,xload需要使用HW Ecc, 其他全部使用SW ECC。列表如下:& &x-loader
'nand ecc hw'& &u-boot
'nand ecc sw'& &okernel
'nand ecc sw'& &rootfs
'nand ecc sw'& &spash
'not required', default sw without oob3. Issue: 启动过程中打印错误信息"Ignoring unrecognised tag 0x".& &Fixed: 屏蔽掉U-Boot中的函数'setup_videolfb_tag', 因为它传递了错误的参数给Kernel.4. Issue: 启动过程中打印错误信息"dpll3_m2_clk rate change failed: -22".& &Fixed: 这个错误发生在初始化SDRAM的PLL时钟的时候。& &
&修改文件"arch/arm/mach-omap2/sdram-micron-mt46h32m32lf-6.h", 修改数组'mt46h32m32lf6_sdrc_params'的第3个指,把改成.& & & &
&SDRAM的默认时钟为266MHZ(LPDDR: Low Power Double Data Rate, so it running 133MHZ instead), 计算结果应该为 , 而非预定义的,所以报了错。5. Issue: 启动过程中打印错误信息"omap-dss DISPC error: Requested pixel clock not possible with the current OMAP2_DSS_MIN_FCK_PER_PCK setting. Turning the constraint off."& &Fixed: 修改文件'.config', 把变量 'CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK'的值从 4 改成 2.& & & &
&或者:'make menuconfig' -> System Type -> TI OMAP Implementations -> Minimum FCK/PCK ratio (for scaling)6. Issue: 启动过程中,在打印"Freeing init memory: 164K"之后,打印"Kernel panic - not syncing: Attempted to kill init!",然后系统崩溃.偶然出现,频率不低。& &Fixed: 使用2.6.29的kernel一直没解决,移植到2.6.38后解决。怀疑Kernel处理UBIFS出了问题。7. Issue: 使用网口芯片"smsc 9221",替换原来的"dm9000".& &Fixed: u-boot 1.3.3 的软件改动:& &
&修改源文件 "include/configs/sbc8100.h":& & & &
&* Disable the 'dm9000' relatives.& & & &
&* Add new line: '#define CONFIG_DRIVER_SMC911X 1' & '#define CONFIG_DRIVER_SMC911X_BASE 0x2c000000'.
&修改源文件 "board/sbc8100/mem.c":& & & &
&* Disable the '#ifdef CONFIG_DRIVER_DM9000' at the line 263th, for enable the GPMC configurations as that of 'dm9000'.
&修改源文件 "drivers/net/smc911x.c":& & & &
&* Add new line '#define CHIP_1'. Append new member '{CHIP_9221, "LAN9221"}' to the array 'chip_ids'.
&注意这里为什么选择地址0x2c000000. 这是因为我的硬件把网口挂在了CS6上,关于CS6的配置位于源文件"board/sbc8100/mem.c"函数"gpmc_init()"的末尾。
&这个虚拟地址,是在这一段配置中固定了的,具体请看TI手册关于CS_CONFIG(0-7)的描述。
&Linux-2.6.29的软件改动:
&* make menuconfig: disable dm9000, enable 'CONFIG_SMSC911X'.
&* 修改源文件 "arch/arm/mach-omap2/board-omap3sbc8100.c"(这个目录是我的硬件平台源文件):& &
& & & * Disable 'dmp9000' relatives.& &
& & & * Modify the structure 'smsc911x_config', change the member flags' value from 32BIT to 16 BIT.
&* 修改源文件"arch/arm/plat-omap/include/mach/board-omap3evm.h"& &
&* Change 'OMAP3EVM_ETHR_GPIO_IRQ' from 176 to 25(这是我的硬件配置)& &
&* Change 'OMAP3EVM_SMC911X_CS' from 5 to 6. (这个选项没用)
&就这样,比较简单,没有新的开发内容。8. Issue: USB PHY 'isp1504'不能工作。& &Fixed: 两个问题:
第一,isp1504有个片选引脚,操作过程中需要拉底。
第二,关于isp1504的clk引脚,如果是HostController的PHY,clk由Controller提供,1504只输入;如果是DeviceController的PHY,clk由isp1504提供,controller输入,此时isp1504的clk来源于XTAL1输入的分频。在我们的硬件中,是把isp1504作为HostController的PHY来使用。用示波器打此clk引脚,发现在通讯的时候有两个时钟信号,所以确定需要关掉ISP1504的CLK输出。根据isp1504的手册,发现需要把isp1504的XTAL1&XTAL2两根引脚置成VCC/GND或者GND/GND,告知硬件人员问题随即被解决。
以上硬件描述来源于ISP1504的手册。9. Issue: ST16C554 QuardUart芯片驱动调试。& &Fixed:
&四合一串口扩展芯片,在目标硬件上位于片选3上,驱动可沿用driver/8250.c,只是在以下地方有修改:
&* u-boot-1.3.3/board/sbc8100/mem.c, 在网口CS6地址的配置下面,添加了CS3的配置(CONFIG1-7: 用于配置当前片选的访问时序)。
&* platform_device,加入了ST16C554的四个串口描述,修改了8250的部分代码。注意我这边的uartclk取值3686400。10. Issue: SJA1000T CAN芯片驱动调试。& & Fixed:&& &
& 最重要的部分,是在调试CAN芯片的读写时许。参见SJA1000T手册 'AC timing diagrams'这章节的图,一次CAN寄存器的读写包括5个信号: AD(偏移地址),ALE,RD或者WR,CS。
& 这4组信号在我的目标硬件上都有PIN复用,最终我是采取了一次写操作(AD+ALE),然后紧跟一次读或者写操作(RD/WR+CS)来完成一次寄存器的读或者写动作,两次操作连续且受信号量保护。
& 具体应用到读者的硬件平台上,跟硬件平台的对应PIN脚设计相关。 &
& 除了上面的时序外,还要做:
& * CPU端对应CS的访问时序配置,跟st16c554一样.
& * 移植Lincan或者SocketCan驱动。(linux-2.6.29 不带can驱动, linux-2.6.38自带socketcan)。
&&11. Issue: PIN脚复用配置。& & Fixed: 在前面的驱动中,很多地方都涉及PIN脚复用配置。 涉及源代码: 'u-boot-1.3.3/board/sbc8100/sbc8100.c'中的宏定义'MUX_DEFAULT_ES2',文档支撑"7.6.3.2 PADCONFS Register Description" 每个芯片的驱动开发之前,都应该先来此确定一下CPU对应的PIN脚设置是否正确。特别是在遇到以下情况后,首先应来此校验一下:
* PIN脚默认电平不对;
* PIN脚不能输出或不能接收输入;
* PIN脚不能唤醒睡眠状态;12. Issue: 低功耗调试& & Detail: 客户要求最低功耗20MA(5V),使用linux-2.6.29最低功耗只能达到90MA,相差甚远。 原来的硬件+linux-2.6.29最低功耗太高的原因:
* 硬件设计没有考虑功耗问题,有些芯片即使断掉VDD输入仍在通过地址线数据线漏电。
* linux-2.6.29软件不完善,最小系统不能进入休眠模式,最小系统IDLE只能减小20MA功耗。 解决办法及过程:
* 硬件:拿掉客户所不需要的芯片;
* 软件:尝试升级kernel。
Linux GIT有一分支叫linux-omap, 这个分支主要由TI自己的人负责omap系列芯片的模块驱动开发、BUG解决、kernel版本更新、迭代,由大量的OMAP芯片使用厂商开发对应硬件平台支撑代码(kernel/arch/arm/mach-omap2/board-XXX.c/h)。 如果读者感兴趣,可google这些关键词: linux-omap, beagleboard, linux-pm。 现在,以下链接可以使用: "http://www.omappedia.org/wiki/Linux_OMAP_Kernel_Project" : 这个分支的介绍 "http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap-2.6.a=summary" : GIT分支下载地址 第一个网页页面中,有个8mw的概念,我就是奔着这个8mw的目标才去移植新版本的kernel。 以下日志均产生于移植过程中。21. Issue: 启动过程停止在 'Starting kernel ...' ,kernel不能被uncompress& & Fixed:&& &
& * 默认选择的平台是omap3evm,我更改为omap3_beagle,问题即被解决。
& * 原因见源代码"arch/arm/plat-omap/include/plat/uncompress.h", evm默认debug port是UART1,而我的硬件是UART3.
& * 而且我们的硬件很接近beagleboard.22. Issue: 启动过程停止在以下打印以后:& &
& Starting kernel ... & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&& & &
& Uncompressing Linux... done, booting the kernel. & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & && & Fixed:&& &
& 最后原因确定是: 编译器版本造成。把编译器版本从 'arm-2007q3' 更新到 'arm-2009q1' 问题即被解决。
& 寻找问题的过程很复杂。
& * 首先核对u-boot和kernel的magic_number发现是对的。
& * 其次让硬件飞了一个调试用的led(因为调试串口可能还没初始化),发现它是卡在'init/main.c: calibrate_delay()',非常底层,怀疑是timer没跑起来导致jiffes没有更新。
& * 遍历我们的硬件与beagleboard的所有区别,尝试合并timer相关代码(timer-gp.c/dmtimer.c/ex...)从2.6.29到2.6.38,尝试多个版本u-boot和kernel,结果一样,几近绝望!
& * 回过来往网上一搜,发现elinux/beagleboard的limitation一节有明显的说明,要求升级toolchain!
& 升级toolchain以后,u-boot原来的编译选项 'armv7a' 要改成 'armv7-a', 源代码在这个位置'omap3/config.mk'。23. Issue: 清理arch/arm/mach-omap2/board-omap3beagle.c源代码。& & Fixed:
& 这是跟硬件平台beagleboard底层相关的源代码,因硬件有区别,所以需要改动,不然会出一些莫名错误。
& 最好的办法是不要改之,而复制一个board-omap3XXX.c代码,到复制的源文件中改,再修改Kconfig和Makefile,为自己的硬件平台生成一个对应的配置选项。
& Beagleboard这一条线相关的其他代码都需要更改,改的最多的就是IO口。24. Issue: linux-omap-2.6.37不能加载UBIFS,打印以下错误信息:& &
& (2.6.38也可能有同样的问题)& &cmdlinepart partition parsing not available& &Creating 5 MTD partitions on "omap2-nand.0":& &0x-0x : "X-Loader"& &0x-0x : "U-Boot"& &0x-0x : "U-Boot Env"& &0x-0x : "Kernel"& &0x-0x : "File System"& &agan>> Try attach 4, with VID_HDR_OFFS: 0& &UBI: attaching mtd4 to ubi0& &UBI: physical eraseblock size: & 131072 bytes (128 KiB)& &UBI: logical eraseblock size: & &129024 bytes& &UBI: smallest flash I/O unit: & &2048& &UBI: sub-page size: & & & & & & &512& &UBI: VID header offset: & & & & &512 (aligned 512)& &UBI: data offset: & & & & & & & &2048& &uncorrectable error :&& &UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 0:512, read 512 bytes& &uncorrectable error :&& &UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 4:512, read 512 bytes& &uncorrectable error :&& &UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 5:512, read 512 bytes& &uncorrectable error :&& &UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 6:512, read 512 bytes& & Fixed: & && &
& & &最后的解决办法:
& & &1. board-omap3beagle.c(或者board-omap3XXX.c: 使用你的平台源文件) -> omap3beagle_nand_data: 添加一个新选项 '.devsize=1'.
& & &发现原因:
& & &board-omap3beagle.c -> omap3beagle_nand_data.options=NAND_BUSWIDTH_16,的确配置了使用16位Flash,但是纵观后续代码这个options根本没有得到使用,上层一直在使用8Bits位宽配置。
& & &发现过程颇为复杂:
& & &* 在同一个GIT Server上,发现2.6.32的kernel可以加载UBIFS。
& & &* 调试两个版本的源代码:nand_ecc.c->calculate_ecc(),发现计算之前,从同一地址读出的数据就不一样,因此基本确定是Flash读写或者初始化参数有问题造成的。
& & &* 比较32/38两个版本的Flash配置,再核对38版本Flash的初始化过程,最后发现了问题。
& & &2. 16位配置生效以后,仍有报ECC错误或者偶然panic现象,这样解决:
* 移植代码 'nand_base.c',从 '2.6.32' 到 '2.6.37', 然后在UBI + NAND + swecc的配置下工作一切正常。
* 在源代码函数'omap2.c:omap_nand_probe()'中新添一行'info->nand.badblockbits = 8;'。感觉这里有BUG。
然后感觉一切正常,没有任何错误打印信息。25. Issue: kernel-2.6.37的Suspend不能挂起最小系统。& & Fixed:&& &
& 参照网页'OMAP_Power_Management.htm'里面列出的测试脚本,我自己写了一个pm.sh,运行后,通过'cat /debug/pm_debug/count'发现CORE从来没有进入过Sleep/Ret状态。
& 最后解决办法:
& 修改'arch/arm/mach-omap2/usb-musb.c', 加入以下函数:
& ////////////////static void omap3_musb_reset(void){#define OTG_SYSCONFIG & & &0x404#define OTG_SYSC_SOFTRESET BIT(1)& & & &void __iomem *otg_& & & &if (!cpu_is_omap34xx())& & & & & & & && & & &otg_base = ioremap(OMAP34XX_HSUSB_OTG_BASE, SZ_4K);& & & &if (WARN_ON(!otg_base))& & & & & & & && & & &/* Reset OTG controller. &After reset, it will be in& & & & * force-idle, force-standby mode. */& & & &__raw_writel(OTG_SYSC_SOFTRESET, otg_base + OTG_SYSCONFIG);& & & &iounmap(otg_base);}void __init usb_musb_init(struct omap_musb_board_data *board_data){ return omap3_musb_reset();}
& ////////////////
& 这源于linux-omap邮件列表里面的一个补丁,原因是"USB-OTG"被Bootloader置成Awake状态,且在Kernel中这个状态没有被更改过,而CORE对OTG有依赖关系。
& 问题的解决也颇为复杂,在应用这个补丁之前我还尝试升级过u-boot到'beagleboard-validation-u-boot-beagle-XXX'的多个版本,均无作用。
& 应用补丁后,目标硬件在Suspend to Sleep/Off状态时,可以达到50MA的功耗,如果硬件改改应该可以进入20MA的区间。以上文章是作者原创,如有错误请指出。
阅读(6933) | 评论(9) | 转发(4) |
相关热门文章
给主人留下些什么吧!~~
您好,原本就是關閉的&关闭 hwecc & prefetch & dma&
[& & 2.524139] UBI error: vtbl_check: bad CRC at record 32: 0x301d5c7e, not 0xf116c36b
[& & 2.532318] UBI error: vtbl_check: bad CRC at record 32: 0x301d5c7e, not 0xf116c36b
以上解掉了
現在剩以下error
[& & 2.527221] UBI error: ubi_io_read: error -74 (ECC error) while reading 22528 bytes from PEB 0:2048, read 22528 bytes
[& & 2.540130] UBI error: ubi_io_read: error -74 (
匿名: 嗨,您好我造你UBIFS方式去做但是還是不行耶
DM3730,kernel 2.6.37,Android 2.3.5
以下是error
[& & 0.000000] Kernel command line: console=ttyO0,.....尝试配置kernel -& 关闭 hwecc & prefetch & dma,然后再试。
当然要求u-boot里面烧写rootfs同样需要使用soft ecc。
嗨,您好我造你UBIFS方式去做但是還是不行耶
DM3730,kernel 2.6.37,Android 2.3.5
以下是error
[& & 0.000000] Kernel command line: console=ttyO0, androidboot.console=ttyO0 mem=512M ubi.mtd=4 root=ubi0:rootfs rw rootfstype=ubifs rootdelay=1 init=/init ip=off omap_vout.vid1_static_vrfb_alloc=y vram=8M omapfb.vram=0:8
[& & 1.325744] NAND device: Manufacturer ID: 0x2c, Chip ID: 0xbc (Micron )
[& & 1.332702] Creating 5 MTD partitions on &q
博主,我最近正纠结于写omap3530外扩sja1000的驱动。我的sja1000的数据总线和控制总线都是和omap3530的gpmc接口直连的。看了二者的时序图,实在是不知该怎么配置才能实现。访问sja1000的寄存器也不知该用什么函数或语句。老板每天都催,真是急死了。才看到您的博文,不仅实现了网络部分的驱动,sja1000也实现了,真是太佩服了。可以将您底层配置那部分分享给我吗,或者给我一点指点也好,不胜感激。我qq: 邮箱:
请登录后评论。当前位置:
微信扫一扫分享到朋友圈
OMAP3530采用了600MHz ARM Cortex-A8内核与420 MHz TMS320C64+TM DSP双核结构,几乎支持所有嵌入式操作系统(例如WinCE、Symbian OS、EPOC、Linux等),可以通过配置及编译x-loader、u-boot、kernel、busybox源码文件来获得OMAP3530所需的镜像文件,然后把镜像文件拷贝进SD卡,这样就可通过SD卡启动Linux系统。TI公司的DVSDK使ARM与DSP建立连接,利用DVSDK开发套件开发算法程序,其优点是算法的可移植性好,能够有效缩短开发周期,但是无法对DSP端运行的算法程序进行实时在线调试,而且DSP多流水线处理方式的优势难以得到充分发挥,所以算法程序也并不是最优化的。而在CCS下直接开发DSP端的算法程序,其优点是能够通过优化算法程序最大限度地提高DSP端数字信号处理的效率,缺点是算法程序的可移植性差。北京荣邦佳业科贸有限公司作为元器件代理经销商为客户提供了大力支持。 ------------------------------点击右上方,即可分享到朋友圈更多详情资讯信息,登陆官方网站:公众微信号码:RBJY168
分享给好友
分享到微信朋友圈:
第一步 打开微信底部扫一扫
第二步 扫下面的文章二维码
第三步 右上角点击转发
相关文章Relevant
现如今,飞机以舒适、方便与节省时间等原因成为出行首选的交通方式之一.可你是否知道,为何不能喝飞机上的冲泡茶饮,又为何在...
【最费脑力的14部电影】《盗梦空间》、《记忆裂痕》、《生死停留》、《死亡幻觉》、《禁闭岛》、《穆赫兰道》、《蝴蝶效应》、...
■ 点击上面蓝字一键关注 ▲QIBU生活微刊建议在WIFI下观看,土豪请随意~~1、每一次接吻 会消耗体内至少12个卡路里科学家指出:...
因女儿未出世便患肿瘤,柴静离职后首发雾霾调查.雾霾是什么?它从哪儿来?我们怎么办?看完这些,才知道雾霾的真相.震撼!震...
我是主播 贝妮~(微信号:Voaoao)每天提供最热门、最火爆、最精彩的视频!口味有点儿重喔~笑死!笑死!笑死!如果觉得这些还...
感知CG,感触创意,感受艺术,感悟心灵 在CG世界的一期中我们展示了 Vince Low的一部分作品,今天再次翻看CG网站时发现他的...Wince NANDFlash启动和SD卡启动过程分析
Wince NANDFlash启动和SD卡启动过程分析
处理器制造时,烧写到内部的一段固定的代码,通过判断引导配置引脚,选择第一个外部引导代码。
XLDRNAND.nb0
platform.c
startup.s jumpto.s
NANDFlash上的第一段代码,用于选择第二段外部引导代码。
XLDRSD.nb0
位于SD卡,用于选择第二段外部引导代码。
是XLDRSD.nb0的实际的文件名。
EBOOTND.nb0
main.c menu.c
stub.c flashmenu.c
mmu.c startup.s
flash.c cfg.c
位于NANDFlash上的第二个分区,用于引导内核的启动。
EBOOTSD.nb0
flash.c cfg.c
位于SD卡,用于引导内核启动。
从NANDFlash启动的过程:
(1)&&&&&&首先执行startup.s的代码,拷贝数据段和代码段到SRAM,最后跳转到main.c中的XLDRMain()函数运行。
(2)&&&&&&main.c中的XLDRMain()函数,首先将NANDFlash中的EBOOTND.nb0拷贝到内存中,最后调用jumpto.s中的jumpto函数跳转到EBOOTND.nb0的Starup.s处运行。
(3)&&&&&&在startup.s中主要激活MMU然后跳转到EBOOT的main函数运行。
(4)&&&&&&Main函数中使能设备时钟,执行BootloaderMain()函数,BootloaderMain()函数位于platform\common\src\common\boot\blcommon\Blcommon.c中,主要是初始化平台,然后执行OEMPreDownload ()函数。最后调用函数OEMLaunch(),启动内核。
(5)&&&&&&OEMPreDownload ()函数位于main.c文件中,初始化键盘,显示开机LOGO,设置NANDFlash的引导保留块(0~13),读取引导配置(EBOOT区域的最后一个sector),读取按键值shift+NO(只在插入可启动的SD时有效)或shift+*,如果按下shift+*,显示菜单,进行菜单中的相关操作。然后调用函数OALKitlDeviceType(),判断是将从SD卡还是从NANDFlash下载内核到内存运行。
从SD卡启动的过程:
(1)&&&&&&首先执行startup.s的代码,拷贝数据段和代码段到SRAM,最后跳转到sdmain.c中的XLDRMain()函数运行。
(2)&&&&&&sdmain.c中的XLDRMain()函数,首先将SD卡中的EBOOTSD.nb0拷贝到内存中,最后调用jumpto.s中的jumpto函数跳转到EBOOTSD.nb0的Starup.s处运行。
(3)&&&&&&在startup.s中主要激活MMU然后跳转到EBOOT的main函数运行。
(4)&&&&&&Main函数中使能设备时钟,执行BootloaderMain()函数,BootloaderMain()函数位于platform\common\src\common\boot\blcommon\Blcommon.c中,主要是初始化平台,然后执行OEMPreDownload ()函数。最后调用函数OEMLaunch(),启动内核。
OEMPreDownload ()函数位于main.c文件中,初始化键盘,显示开机LOGO,设置NANDFlash的引导保留块(0~13),读取引导配置(EBOOT区域的最后一个sector),读取按键值shift+NO(只在插入可启动的SD时有效)或shift+*,如果按下shift+*,显示菜单,进行菜单中的相关操作。如果按下shift+NO,依次烧写xldrnand.nb0,ebootnd.nb0,nk.bin, logo.nb0到Flash的对应分区,然后调用函数OALKitlDeviceType(),判断是将从SD卡还是从NANDFlash下载内核到内存运行。
我的热门文章
即使是一小步也想与你分享1238人阅读
Windows CE定制(17)
先说下.bin和nb0(x)文件的差别:两个都是CE的镜像,通过串口直接下载用nb0,pb下载用bin,nb0文件要大一些。
.nb0是可以直接烧到FLASH/ROM中的,是代码镜像,可以直接跳转到其入口执行。 nb0是非压缩的数据,里面的数据是实际的NK展开以后在内存里面的数
.bin是Microsoft binary image格式的文件,必须按其格式定义解开到其指定的地址空间的位置才能执行。bin是有压缩的数据,里面的数据是压缩以后类似于成块形的数据,被loader拷贝到内存以后没有区别。
常见的Windows CE运行时映像有以bin和nb0为扩展名的两种格式。BIN文件是默认的Windows CE运行时映像格式。它按照Section组织文件的内容,每个Section都有自己的起始地址,长度和校验和。BIN文件不能直接被执行,必须被按照一定的格式解开到内存里才能执行。NBx(有可能是NB0,NB1&&根据配置而定)文件是可以被烧进Flash ROM中的按位分(byte-for-byte)的原始数据。可以直接从Flash ROM中本地执行。
David Kelley [MS] (Expert):Q: Which is the difference between the nk.nb0 and nk.bin image created by PB5.0?A: .nb0 files is a raw file format suitable for flashing ROM via a ROM programmer while the .bin file is a MS format we use to download images to the device via the bootloader. In the end, same information, different formats.
sschrock [MS] (Expert):Q: Which is the difference between the nk.nb0 and nk.bin image created by PB5.0?A: .nb0 is a raw image that can be written to ROM as-is. .bin is a special format that has empty chunks removed so that it takes less space and downloads more quickly.
1.stepldr:天嵌BBS上斑竹说,和UBOOT类似,也是用于下载和启动系统的,只不过它是用来下载和启动WINCE的,stepldr将eboot搬运到Nand Flash中,然后再运行eboot。2.Nk.bin:必需。按照section组织的二进制操作系统映像3.Nk.nb0:可选。可以直接烧到Flash中,支持XIP的操作系统映像4.Eboot.bin:可选。按照section组织的二进制以太网BootLoader映像5.Eboot.nb0:可选。可以直接烧到Flash中,支持XIP的以太网BootLoader映像
File&&&&&&&&&&&&&&&&& &Description Xip.bin&&&&&&&&&&&& &A single .bin file containing all XIP regions. Nk.bin&&&&&&&&&&&& & A .bin file for the NK region. Shell.bin&&&&&&&&& &A .bin file for the SHELL region. Apps.bin&&&&&&&&&& A .bin file for the APPS region. Chain.bin&&&&&&&&& A .bin file for the XIP chain. The XIP chain is a list of all XIP regions that reside in flash memory or RAM and is accessible from the OEM Adaptation Layer (OAL).& Eboot.bin&&&&&&&&& A .bin file for the Ethernet boot loader.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:527949次
积分:5731
积分:5731
排名:第3808名
原创:138篇
转载:75篇
评论:41条
(1)(1)(1)(3)(2)(1)(5)(2)(8)(12)(19)(9)(5)(4)(3)(1)(1)(2)(2)(9)(10)(6)(8)(37)(14)(5)(10)(2)(9)(12)(11)(2)}

我要回帖

更多关于 nand flash 驱动 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信