历史上的今天
返回首页

历史上的今天

今天是:2025年01月16日(星期四)

正在发生

2019年01月16日 | LPC2200系列bootloader实现过程:

2019-01-16 来源:eefocus

网上也有类似的实现办法,有NXP官方提供的,这个容易获得,在LPCware网站上就可以下载最新的版本,相对来说,这个也是比较完整 的工程。还有ZLG的,AN070701,我看了一下,好象是BOOT,与应用在一个工程里,这个对我来说,不太合适,我要做的是两个独立的工 程,一个BOOT,一个APP,不过以上来种办法原理都是一样的;另外网上还有很多网友自己做的移植,我也下载一些看了,大多都直接或 是间接用了NXP,或是ZLG的方案。经过比较,我决定使用NXP的例子。


bootloader原理是boot启动之后,首先判断是否有固件需要从串口升级,如果有则通过串口下载固件,下载完成了,把固件通过IAP烧 写在0x00010000FLASH地址去,然后跳转到0x00010000地址,执行应用程序。


基本原理都是这样,明白了原理,可以轻易的改为从网口,从SD卡,启动应用程序,整个移植的过程还算顺利,意想不到的顺利,我把 串门底层收发函数移植过之后,很快就能用了,不过我不满意的是“官方BOOT”的串口收发是一种阻塞方式,好象很落后了,我在 LPC1788上使用的是非阻塞的收发方式。不过官方的BOOT功能比较完善,还有几个命令,用着不错。


用了半个月之后,突然发现了一个很隐蔽的问题,当我在LPC2294上加第二个网口的时候,不定时死机,单位跟踪也跟了,但是依然找 不到问题所在。在网上搜索了一下,发现有几个人遇到了类似的问题,“通过自定义的BOOTLOADER启动应用程序之后,不定时死机”, 现象都差不多,表现有的是printf()死机,我的这个是加第二个网口驱动死机;但有一个共同点“都使用了自定义的BOOTLOADER”,定 位问题的过程“痛苦而又漫长”,首先我确定我的应用程序没有问题:我直接把我的应用程序烧写在0X00000000地址,启动板子,没有 死机,从这基本断定我的应用程序没有问题。


但基本把问题锁定在BOOT上,但是BOOT是官方给的,应该没有问题吧,既然用了,我是很少怀疑网上官方给的程序的,象NXP这样的公 司,我只有学习的份。于是我按网上某同学的方案,把0X00000000-0X00010000这范围内的FLASH空间填充0x00,重新把应用烧在 0X00010000处,(注:中断向量表也要复制到SRAM(0x40000000)处),很长一段时间,我都在怀疑是中断向量表出问题了。这样板子上 电之后,先执行64k的NOP指令,一直到0X00010000的应用程序,这样测试,还是没有问题,这就说明我的中断向量表重映射到SRAM是没 有问题的,这样就可以基本判断是BOOT出的问题了,以上的思路基本都是网友的思路,网上也就到此为止,我做到这里,突然有了灵感 ,是不是boot往app跳转的时候出了问题了呢,马上测试,果然发现了问题所在,在上电复位的时候LPC2294是内核是处于SVC状态,而 BOOT跳转到APP的时候,在处于USR状态,这USR状态下,对很多寄存器操作都是是无效的,比较设计堆放等等操作无效,最终导致了APP 刚开始的一段汇编代码是没有正确执行的,这就为后面的不定时死机埋下了伏笔!!


找到这个如此隐蔽隐蔽的错误,真的很高兴,感谢网友做了那么多的研究,


再一次认证了,老天总是我在快要放弃时,眷顾了我一下!!

推荐阅读

史海拾趣

Holy Stone公司的发展小趣事

Holy Stone企业股份有限公司创立于1981年,总部位于台北市。创立之初,公司凭借创办人深厚的电子技术背景,迅速在电子元件市场站稳脚跟。起初,Holy Stone主要作为专业的电子零件代理商,为客户提供专业的技术服务与解决方案。这一阶段,公司通过扎实的专业技术基础和敏锐的市场洞察力,逐步建立起稳定的客户基础,为后续的发展奠定了坚实的基础。

Elite Semiconductor Products Inc公司的发展小趣事

在电子产品领域,品质是赢得消费者信任的关键。Elite深知这一点,因此在生产过程中严格把控每一个环节,确保产品的品质达到最高标准。公司建立了完善的质量管理体系,从原材料采购到生产流程,再到产品检验,都严格遵循国际标准和行业规范。这种对品质的坚持,让Elite的产品在市场上赢得了良好的口碑,也为公司赢得了众多合作伙伴的信任。

Advanced Microelectronic Products Inc公司的发展小趣事

AMP公司深知人才是企业发展的核心动力。因此,公司高度重视人才培养和团队建设。公司建立了一套完善的人才培养机制,通过内部培训、外部引进等方式,不断提升员工的专业技能和综合素质。同时,公司还注重团队建设,鼓励员工之间的合作与交流,营造积极向上的工作氛围。这些举措为AMP公司的持续发展提供了有力的人才保障。

Advanced Photonix公司的发展小趣事

在电子行业的早期,Advanced Photonix以其卓越的光学技术脱颖而出。公司创始团队由一群富有远见的科学家和工程师组成,他们专注于研发高速光电子和高性能的光纤测试产品。经过无数次的实验和试错,团队终于成功开发出一种具有创新性的光纤传感技术,这一技术为电信行业提供了前所未有的分布式光纤传感解决方案。这一技术突破不仅为Advanced Photonix赢得了市场声誉,也奠定了公司在电子行业的重要地位。

DLP Design公司的发展小趣事

DLP精工科技公司,一直秉承“品质至上”的经营理念,在DLP技术产品的设计和制造过程中严格把控品质。公司拥有一支专业的研发团队和先进的生产设备,确保每一件产品都符合高标准的质量要求。通过不断的技术创新和产品升级,DLP精工科技在电子行业中树立了良好的品牌形象,赢得了消费者的信赖和认可。

Delta Electronics公司的发展小趣事

作为一家具有社会责任感的企业,Delta Electronics一直积极践行可持续发展理念。公司自2004年起,全球新建办公大楼、生产基地均依绿建筑工法设计建造。此外,公司还积极参与各类环保活动和社会公益事业,推动绿色能源和环保技术的发展。这些举措不仅有助于保护环境、减少污染,也提升了Delta的企业形象和品牌价值。

问答坊 | AI 解惑

ARM入门求助

各位大哥大姐,小弟自动化出身,工作几个月了,做的是单片机设计,已经做过几个产品了。在工作中发现了有些问题单片机解决不了,所以准备进入ARM的学习之中,想从ARM7开始,但是还是没有一个完备的计划,因为这一部分我毕竟是没学过,学校里也根本 ...…

查看全部问答>

创意屁股灯

想象一下,夜半。。。当你醒来看见这只屁股在发亮时,会是什么样的感受? 设计师将这款壁灯设计成了屁股形状,实在是有趣呀! …

查看全部问答>

千兆以太网相机的整体架构及工作原理

 各位前辈,本人想做个千兆以太网相机,但是还没有个思路,整体的工作过程和整体架构不太知道,希望各位多多指教!谢谢!…

查看全部问答>

如何解决VxWorks情况下的tcp连接异常快速处理方法,包括客户端死机,reset重起,网线拔掉,对端掉电

tcp连接模型如下(C语言) 场景:A与B是vxWorks下的两主机,需要建立一条TCP连接.(A,B任一方为client或server); 产生这个原因是因为tcp是一个单向的处理通道,也就是A到B数据量很大,B到A的数据量很小;没有设计心跳和握手.产品已成型,更改设计涉及面广, ...…

查看全部问答>

usb充电与系统供电电路设计

    便携设备用3.7v锂电池,可usb充电,当usb设备在充电时系统供电怎么供呢?…

查看全部问答>

急!急!急求VHDL高手帮忙!!!!

小弟初学VHDL但眼下急需用VHDL写一个JPEG2000D的编码器的程序,望各位高手赐教,小弟感激不尽!!…

查看全部问答>

关于winmm.lib在wince下的使用

请问winmm.lib可以在wince下使用吗?如果不能,有没有实现类似功能的函数库?…

查看全部问答>

君正4730问题

有在君正4730,wince下做驱动开发的哥们吗? 有什么问题可以方便讨论下…

查看全部问答>

wince5.0中如何实现中断

基于s3c2410,在网上找到4.2的,http://www.yuanma.org/data/2006/0707/article_1104.htm 不过里面提到的文件很多找不到。或者有文件名,当路径不对,而且还有多个,请求兄弟们的帮助。 第一次搞嵌入式。谢谢!…

查看全部问答>

tornado2.2.1的补丁谁能给提供一个下载地址

原文地址:http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/ACE/ACE-INSTALL.html#VxWorks/NT The make (version 3.74) that is provided with Tornado 2.2 cannot be used to build ACE. A working version is available from the WindRiver su ...…

查看全部问答>