WinCE下在系统更新NK调试小记

由于项目规定,产品不带串口和网口,调试的时候对系统的下载只能采用直接烧录的形式,这个在调试的时候方便了,但是如果装机了要更新就麻烦了,所以研究在WinCE下直接更新的方法,折腾了一阵,总算搞定,简单记录一下几个要点。

由于没有SD卡,与外界通讯的方式只有WIFI与USB同步,考虑到FLASH空间足够,因此考虑将烧录文件拷贝到FLASH内,读取后直接写入对应的FLASH空间。

首先要实现的是在WINCE下对FLASH的烧写。经过查找,找到了一些资料,通过对FLASH驱动的修改实现。方法是在FMD.C文件中,对FMD_OEMIoControl进行扩展,增加FMD_EraseBlock与FMD_WriteSector命令实现。增加新的IO控制码,并配置相关参数及传递需要的数据,可以实现应用程序对FLASH指定地址的擦写。

之后就是对烧录文件的读取,由于每次执行FMD_WriteSector命令,只能写入一个Sector长度的数据(BSP这样设定了),所以对于文件也是按照sector长度进行读取,然后进行写入。由于我烧录的时候nb0文件,因此可以不需要对文件进行解读,直接读取后烧录就可以。

操作过程:

1、调用FMD_EraseBlock对需求区域进行擦除;

2、打开NK.NB0文件,应用程序中采用了CreatFile的方式进行对应路径的文件打开;

3、使用ReadFile每次读取2k的数据,然后调用FMD_WriteSector将数据依次写入FLASH指定地址,直到完成;

4、完成后重启系统,更新完成。

 

调试中碰到了几个参数设置问题,所以折腾了好几天才解决,记录一下:

1、FMD_OEMIoControl接收的参数是BYTE型的,所以数值较大时候,需要采用数组方式分拆传送,之前就有擦除的块ID超过255导致擦错地方的情况……

2、有些FLASH中对FLASH进行了保护,所以在进行擦写前,要先确定该区域可编程。

3、FMD_WriteSector中有一个SectorInfo参数,可能不同的BSP操作不同,所以当时在网上查到别人使用了NULL,照搬,怎么写都不对,使用烧录器读出数据,都是对的,就是重启后系统错误然后就挂了,查了蛮久才发现原来是没有传递这个参数,导致SPARE区被写成了0xFF,读取失败,而之前读取数据对比读的都是main区……

 

sectorinfo定义:

typedef struct _SectorInfo {

DWORD dwReserved1;

BYTE bOEMReserved;

 BYTE bBadBlock;

WORD wReserved2;

} SectorInfo, *PSectorInfo;

可以根据自己的代码进行参数的配置。

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值