赞助论坛
  • 25486阅读
  • 0回复

不刷机调试海尔机--HiShell 1.0 alpha [复制链接]

楼层直达

发帖
58
精华
11
金币
882
威望
105
贡献
113
好评
41
注册
2010-01-05
楼主    quicktime 发表于: 2010-04-21 01:56:21 
修改调试鸡顶盒的方法一直靠刷机来实现,自从确认海尔机实际代码是在SDRAM中执行之后,开始有个想法,做一个工具把代码直接加载到SDRAM中执行,这样就不用刷机实验调试bin了。
没技术底子,没资料,没设备,一介草根,这个想法付诸实施,进展极慢。单片机和PC相差很多,Keil C的手册反复看了几遍,总算搭了个架子。
还很不完善,憋的时间太久了,先亮亮相吧。先取名叫HiShell

HiShell目前在大海尔上调试测试。信道解调芯片是否有影响不太确定,俺的是AVL1108。

该工具不太适合新手使用,使用前先看看以前的技术贴。

1. 知道CRC32校验,并能用工具计算和修改。
2. 理解什么是升级数据,应用数据,字库数据,开机画面数据,并能准确找到他们。
3. 能理解B大侠的文章 [url=http://bbs.lcdhome.net/read-htm-tid-46127.html]海尔机开机时程序加载过程及内存布局初探[/url]
4. 理论上,按照B大侠的内存布局和几大主程序入口,可以不刷机装载和运行那些代码。不过俺自己机器的主程序入口没有时间分析,没有测试。仅进行了小代码数据测试。不同型号bin的入口应该是不一样的。

>HiShell实现原理:

HiShell包含3个部分,互相独立。好处各工具可独立存在,但也降低了HiShell的易用性。

. HaierBoot2Loader,这个工具以前可能有少数人用过。现在升级到2.3版。HaierBootLoader是一个串口通信工具,作为HiShell的主操作界面。HaierBoot2Loader可独立作为串口工具使用。
. HiShell.bin,这个是HiShell工具组中实现无刷机调试鸡丁盒的主体。必须安装在鸡丁盒内,作为鸡丁盒的bin的一部分烧在的flash内。
. HiBoot.bin,这是一段引导程序,通过HaierBootLoader按海尔机的引导机制注入到鸡丁盒内,再把控制权交给HiShell.bin

先说一下海尔机的开机引导过程。海尔机开机以后,先通过串口和PC联络一下,如果有刷机程序在,则刷机程序把一段引导代码注入到鸡丁盒,鸡丁盒运行这段引导代码,并利用串口和刷机程序通信。
HaierBoot2Loader取代刷机程序,模拟这段过程,把HiBoot.bin注入到鸡丁盒,HiBoot.bin不做刷机,只做一件事,把控制权交给烧在flash中的HiShell.bin。
HiShell.bin进行一些初始化后(可惜这些初始化代码作用还不能完全理解),把自身搬运到7F8000处。然后通过串口接收命令,并解释执行。

HaierBoot2Loader相当于一个键盘和显示控制台,HiShell.bin相当于安装在鸡丁盒内的DOS。

>安装:
1. HaierBoot2Loader在PC上运行。依赖于微软的.NET Framework 3.5。好像Windows 7已经带有.NET Framework 3.5。如果缺少该组件请到微软网站下载。
[url]http://www.microsoft.com/downloads/details.aspx?familyid=AB99342F-5D1A-413D-8319-81DA479AB0D7&displaylang=zh-cn[/url]

2. HiShell.bin的安装。打开原鸡丁盒的bin文件,在升级数据区01D600~01FF00之间有一段FF的空白区域。把HiShell.bin复制到该区域,然后修正升级程序区的CRC校验值。
最后用刷机程序刷进鸡丁盒。可以只刷升级数据区。1M的海尔Flash太小了,2M的空闲区大很多。01D600~01FF00之间大约有10K多一点,HiShell.bin已经4K多了,不知道以后能不能装下。

>使用方法:
1. 打开HaierBoot2Loader,发布的HaierBoot2Loader已经和HiBoot.bin配置好了,HaierBoot2Loader会自动加载HiBoot.bin。
2. 打开鸡丁盒电源。正常情况下出现这样的画面,说明HiShell.bin加载成功。注意红色框内的提示信息。
[p_w_upload=57280]
3. 有时后会抓不到鸡丁盒的开机信号,没有出现上述画面。关掉鸡丁盒电源;然后重新打开Boot2文件,选2023目录下的HiBoot.bin即可,或者关掉HaierBoot2Loader,重新打开。再重新打开鸡丁盒电源。
4. 通过HaierBoot2Loader发送数据功能,在数据输入框内输入命令。数据输出框内显示执行结果。输入框内可直接回车发送命令。
5. HaierBoot2Loader把鸡丁盒接收到的所有数据记录在一个后缀名.log的日志文件中。供进一步分析使用。
6. HaierBoot2Loader的端口开关功能。开启和关闭端口不会重新加载HiBoot.bin。如果需要在中途获取和修改输出日志文件,可关闭端口,修改日志文件后,再重新打开端口。这个功能对于需要下载鸡丁盒内存资料很有用处。
7. 当有大数据量导出过程中,如果关闭端口会造成HaierBoot2Loader陷入死锁,目前还无法解决。如想中断导出,请关闭鸡丁盒电源。

>命令指南:
所有命令不区分大小写。命令执行成功提示符为:“>",失败提示符为: "?"。大多数时候,HiShell不会去检查执行结果,例如像一个不能写入的内存写了一笔数据,执行是没有效果的,但返回提示成功。
以下命令说明中<xxx>表示该命令必须接收的参数。

一、初级命令

. 数据加载命令
L <装入地址> <长度>
加载指定长度的数据到指定内存地址。HiShell接收到该命令后,等待数据输入,直到接收满<长度>个字节的数据,再接收4个字节的CRC32 mpeg2。命令才会执行完成。
一般情况先从输入框输入并发送命令后,然后通过发送文件功能把文件发送到鸡丁盒。
容易操作失误的是,长度输入错误,那么鸡丁盒在接受满数据之前不会响应任何命令。

. 数据导出命令
D <地址> <长度>
导出指定地址的数据。导出数据后面尾随4个字节的CRC32 mpeg2。
注意使用该命令前,先把HaierBoot2Loader的“显示输出数据”功能关闭。因为大批量数据显示会速度很慢,甚至跟不上串口输出数据的速度。
导出数据的步骤:
1. 先关闭端口
2. 关闭“显示输出数据”
3. 把日志文件删除
4. 再打开端口
5. 发送导出命令
6. 等状态条不闪动后,再次关闭端口。
7. 把日志文件改名。
日志文件第一个字符是成功提示符">",后面是导出数据。正常情况下,最后四个字节是CRC32值。但串口通信不太可靠,有时会多接收数据或少接收数据。可观察一下,如果数据长度比导出命令指定的长,则可尝试把最后几个多余数据删除,再用CRC32校验一下,通过则导出成功。

. 代码数据导出命令
C <地址> <长度>
导出指定地址的代码数据。导出数据后面尾随4个字节的CRC32 mpeg2。
51机的一个特点是代码空间和数据空间是隔离的。一般情况下,海尔机的内存模式是代码空间和数据空间合并在一起,所以使用数据导出命令即可。

. GOTO命令
G <地址>
跳转到指定地址执行,控制权交给指定地址的程序。目前没有实现断点返回功能,一去不复返。

二、高阶命令
这些命令称为高阶,不是因为他们能执行复杂任务,而是需要具备一定技术知识才能运用。

. 写数据命令
W <地址> <数值>
往指定地址写一个字节数据。

. 读数据命令
R <地址>
读一个字节数据

. 读特殊功能寄存器(SFR)数据
@ <寄存器地址>

. 写特殊功能寄存器(SFR)
# <寄存器地址> <数值>


. 导出片内256字节的SRAM区数据
I

. 读片内256字节的SRAM区数据
& <SRAM地址>

. 写片内256字节的SRAM区
* <SRAM地址> <数值>

. 写有时序保护的特殊功能寄存器(SFR)
T <寄存器地址> <数值>
和DS390一样,HI2023/HI2023E有部分特殊功能寄存器(SFR),采用时序保护,开锁后必须在3个时钟周期内完成数据修改。

片内SRAM区数据和SFR是程序运行的重要区域,HiShell本身也要占用部分资源。同时没有提供现场保护功能,读写该部分资料不一定正确,同时可能造成不可预测的后果。

本工具组内使用New BSD授权,任何人都可以使用,但俺不提供任何担保责任。源码暂时不提供,目前没有想到好的方式。
本帖最近评分记录: 7 条评分