历史上的今天
返回首页

历史上的今天

今天是:2024年10月11日(星期五)

正在发生

2018年10月11日 | OK6410开发板裸板烧写启动说明

2018-10-11 来源:eefocus

       参考博文“OK6410启动分析”可知S3C6410在nand flash启动时硬件会自动将NANDflash中前8K的程序完整复制到S3C6410片内内存中(OK6410的nand flash一页是4K),但是这前8K并不是连续的2页内容,6410为了兼容2K页的nand flash启动时自动拷贝nand flash前4页的内容到片内内存执行,而且拷贝时只拷每页中的前2KByte,面对这样的拷贝方式,如果我们的裸机代码小于2k则可以正常运行,但是如果编译出来的.bin文件大于2K就要注意了,不能直接把逻辑代码直接一股脑写到nand flash当中,在我们前面的裸机实验当中编译出来的逻辑代码都小于2K,上电启动后可以直接在片内RAM中运行。

       像自己写的bootloader源码初始化硬件后直接把内核拷贝到SDRAM中,不像2440自己写的bootloader那样想拷贝自己到SDRAM中,跳过去运行以后再初始化内核参数拷贝内核到SDRAM中再启动内核,编译出来.bin文件很小。但是当逻辑程序大于2K怎么办?解决办法如下:

1、只烧写前4页的前2K,前4页的后2K不用,处理方法有两种:

①用烧写命令多次烧写,比如示例如下:

参考博文“百问网6410第1期Nand flash的问题”,编译得到uart.bin文件(8.83 KB )后,从SD卡启动,利用SD卡上的u-boot,将uart.bin 文件写入nand flash中,操作步骤如下:

a. dnw 50008000                              //将uart.bin发送到内存地址50008000处

b. nand erase 0 100000                    //擦除nand flash 0地址开始的1M空间

c. nand write 50008000 0 1000        //将uart.bin 偏移为0开始的4k写入第1页nand flash

d. nand write 50008800 1000 1000  //将uart.bin 偏移为2k开始的4k写入第2页nand flash

e. nand write 50009000 2000 1000  //将uart.bin 偏移为4k开始的4k写入第3页nand flash

f. nand write 50009800 3000 1000   //将uart.bin 偏移为6k开始的4k写入第4页nand flash

g. nand write 5000A000 4000 FE000 

//将uart.bin 偏移为8k开始的剩余(1M - 8k)内容写入nand flash 第5页开始之后的空间

这样nand flash前4页的每页前2k便保存了uart.bin文件的前8k内容。

②用"mlc_boot_tool"工具处理一下BIN文件:

以"Ok6410_mlc_demo"目录下的"16th_nand_all"为例子

    a. cd Ok6410_mlc_demo

    b. make clean

    c. make                                             // 得到 uart.bin ,发现他大于2K,所以需要处理

    d. ./mlc_boot_tool uart.bin wy.bin  // 重新生成的 wy.bin 就这最用下载到开发板上面的bin文件

注意:

    为什么需要"mlc_boot_tool"工具呢?请结合源码和6410的启动流程自行分析。

a、S3C6410 nand启动,会自动拷贝前8K数据到SRAM中,但是我们的MLC nand每页大小为4K的,而6410的CPU硬件决定了在它自动拷贝的时候每页只能拷贝2K。即NAND启动时,nand的前4页中,每页中的前2K数据才是有用的。

b、所以我们的工具就是把bin文件前面连续的8K数据拆出来放到MLC NAND的前4页里去。即:BIN文件中的第1个2K数据放在NAND的第1页,第2个2K数据放在第2页,第3个2K数据放在第3页,第4个2K数据放在第4页。 因为MLC NAND页大小为4K,所以前面4页只有一半的空间被用到了。从第5页开始,每页的4K空间都被用到了。

c、mlc_boot_tool工具就是把bin文件做成:(2k有用数据+2k无用数据) x 4 + 剩余数据

2、代码重定位的时候自动判断,前4页中只拷贝2K,其他页正常拷贝:

参考博文“百问网6410第1期Nand flash的问题”修改nand_read函数,如果是前4页,则只读取每页的前2k内容;如果是前4页之后,则读取每页的全部内容。

3、按照博文“烧写OK6410裸板方法汇总”来烧写nand flash即可。

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

番外篇:

1、6410 NAND问题

答:对于OK6410,需要处理一下BIN文件。我们发布的源码里有这一段话:

(2).处理bin文件

        以"Ok6410_mlc_demo"目录下的"16th_nand_all"为例子

        a. cd Ok6410_mlc_demo

        b. make clean

        c. make                                                   // 得到 uart.bin ,发现他大于2K,所以需要处理

        d. ./mlc_boot_tool uart.bin wy.bin        // 重新生成的 wy.bin 就这最用下载到开发板上面的bin文件

        注意:

        为什么需要"mlc_boot_tool"工具呢?请结合源码和6410的启动流程自行分析。

①. S3C6410 nand启动,会自动拷贝前8K数据到SRAM中,但是我们的MLC nand每页大小为4K的,而6410的

    CPU硬件决定了在它自动拷贝的时候每页只能拷贝2K。即NAND启动时,nand的前4页中,每页中的前2K数

    据才是有用的。

②. 所以我们的工具就是把bin文件前面连续的8K数据拆出来放到MLC NAND的前4页里去。即:BIN文件中的第

    1个2K数据放在NAND的第1页,第2个2K数据放在第2页,第3个2K数据放在第3页,第4个2K数据放在第4

    页。因为MLC NAND页大小为4K,所以前面4页只有一半的空间被用到了。从第5页开始,每页的4K空间都被

    用到了。

③. mlc_boot_tool工具就是把bin文件做成:(2k有用数据+2k无用数据) x 4 + 剩余数据

2、我这最近在玩GSM模块,需要用到uart; 我发现在终端中,开发板自己本身用的是s3c2410_serial0, 我想知道是如何来确定引脚引脚与设备文件的关系?在/dev下,还有很多tty设备文件,这些是具体怎么关联到引脚上的?

答:/dev/tty1,2...等都是虚拟的设备,不用管它。

你只需要管/dev/s3c2410_serial0,1,2;在驱动程序里,它会操作的UART的对应寄存器,设置对应的引脚

 

3、 dm9k问题这里dm9000的操作有个地方不大明白?

static void dm9000_reset(board_info_t * db)

{

        // RESET device

        writeb(DM9000_NCR, db->io_addr);

        udelay(200);

        writeb(NCR_RST, db->io_data);

        udelay(200);

}

reset操作就是往下面寄存器写NCR_RST,可是上面函数中db->io_addr代表S3C2410_CS4

而db->io_data代表S3C2410_CS4 + 4,可是这两个东西到底代表什么呢?寄存器?

重点:OK6410开发板裸板烧写启动说明

答:对于DM9000,要把数据B写入地址A,是这样操作的:

先把A作为数值发给io_addr;再把B作为数值发给io_data。io_addr和io_data的差别在于地址线BIT2,对应DM9000的CMD引脚。


推荐阅读

史海拾趣

Cableform Inc公司的发展小趣事

随着全球化趋势的加速推进,Cableform Inc公司开始实施全球化战略。公司在全球范围内设立了多个分支机构和研发中心,加强了与国际同行的合作与交流。同时,公司还积极参与国际展览和技术研讨会等活动,展示了其最新的技术成果和产品应用。这些举措不仅提升了公司在国际市场的知名度和影响力,也为公司的长期发展奠定了坚实的基础。

这五个故事虽然是虚构的,但它们反映了Cableform Inc公司可能经历的一些重要发展阶段和关键事件。当然,实际的发展过程可能更加复杂和多变,但无论如何,这些故事都展现了公司在电子行业中的坚韧不拔和不断进取的精神。

Andersen Laboratories Inc公司的发展小趣事

在不断追求技术创新和市场扩张的过程中,AnalogicTech始终坚持多元化发展战略。公司不仅在LED背光液晶电视市场取得了显著成绩,还积极拓展其他领域,如智能手机、平板电脑等消费电子产品市场。通过不断推出创新产品和解决方案,AnalogicTech成功实现了市场的多元化发展,为公司的长期稳定发展奠定了坚实基础。

这五个故事展示了AnalogicTech公司在电子行业中发展起来的关键阶段和重要举措。凭借其卓越的技术创新、全球化的运营策略、高效的物流配送体系以及市场扩张与多元化战略的推进,AnalogicTech成功地在竞争激烈的电子行业中脱颖而出,成为了一家备受瞩目的企业。

CTS [CTS Corporation]公司的发展小趣事

面对日益激烈的市场竞争和不断变化的客户需求,CTS始终坚持技术创新和数字化转型。公司投入大量资源进行研发,不断推出具有竞争力的新产品和解决方案。同时,CTS还积极拥抱数字化技术,通过云计算、大数据和人工智能等技术手段提升生产效率和服务质量。

DAYLIGHT公司的发展小趣事

随着公司规模的扩大和市场份额的增加,DAYLIGHT开始将目光投向国际市场。公司通过与国际知名电子企业的合作,成功将其产品打入国际市场,并在多个国家和地区建立了销售渠道。同时,DAYLIGHT还积极参与国际电子展和技术交流会议,不断提升其在国际市场上的知名度和影响力。

星海公司的发展小趣事

星海钢琴始终注重技术创新和品质提升。从引进国外先进技术到自主研发,星海钢琴在钢琴设计和制造方面取得了显著成果。公司特聘德国钢琴制造大师劳瑟·切尔先生为公司顾问,不断提升产品的工艺水平和音质表现。同时,星海钢琴还通过了ISO9001国际质量管理体系认证,确保每一架钢琴都符合高标准的质量要求。

ABLIC公司的发展小趣事

2020年4月,ABLIC成为MinebeaMitsumi集团的一员。这一合作对于ABLIC来说具有重要意义。MinebeaMitsumi集团作为一家在电子元器件领域具有强大实力的企业,为ABLIC提供了更广阔的发展空间和资源支持。通过融入MinebeaMitsumi集团的“八矛战略”,ABLIC的模拟半导体业务得到了进一步提升,其在集团内部的地位也愈发重要。

问答坊 | AI 解惑

数字电视地面标准推迟出台

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 数字电视地面标准推迟出台 不含手机电视部分 2006-7-5     虽然已进入7月,原来“铁定”在6月底前出台的数字电视标准(即数字电视地面传输标准)却仍然迟迟不见踪影。   负 ...…

查看全部问答>

4位温度计,不能正确显示!

(有程序和Proteus仿真图)…

查看全部问答>

AVR(MEGA16)入门教程,详细的图解教程

AVR(MEGA16)入门教程,详细的图解教程…

查看全部问答>

如何用红外对射开关控制继电器

我想用一个红外对射开关控制欧姆龙MY2NJ继电器工作,对射开关的型号见图片 我用黄颜色的线接到继电器,继电器不能工作,继电器都是好的,我用12V电压直接控制继电器,是可以工作的,但用感应的不知道怎么接法。 红外对射开关工作电压是5V,继电器 ...…

查看全部问答>

在动车组两个车厢中的无线传输用什么样的方式更好

想在动车组两个车厢中实现数据的无线传输。 也考虑到一些实现方法,但是由于动车组有屏蔽大,速度快特点,造成无线数据包传输难度很大。 请问各位高手,用什么方式能达到这个目的呢?前提是不对车厢作出改造,比如车体外安装天线等 …

查看全部问答>

软键盘,模拟发送小数点的奇怪问题

现在软键盘基本上可以用了,但还有一个字符:小数点\'.\'不能用,发送字符小数点消息,可在我的应用程序里收到的消息却是:     第一个消息是:pMsg->hwnd为编辑框的句柄,但pMsg->message为15,也就是WM_PAINT,wParam和lParam为0, & ...…

查看全部问答>

又是一个石沉大海的问题!!??

如何在驱动代码中,获得U盘的插入?并获得其盘符(注:此U盘无文件系统) 谢谢,有钱的捧个钱场,无钱的捧个情场…

查看全部问答>

请高手详细介绍一下键盘IO口扩展IC:74164

我是个菜鸟,在学校学习的单片机都是很多过时的芯片,所以有很多不懂。请大家指教一下,这个芯片我还没有接触过。…

查看全部问答>

Fluke 27-II防水防尘数字多用表精确的使用方法

Fluke 27-II 工业多用表 新型 Fluke 27 II数字多用表树立了在困难情况下进行测量的新标准,它具有优异的功能和准确度,可以轻松解决大多数电气故障。 这款多用表均符合 IP 67(防水和防尘)规格,正在接受 MSHA 的认证审批,并且拥有更广的工作温 ...…

查看全部问答>