• 赞助网站
  • 您的位置:  首页 >> 技术交流区 >> DVB机顶盒 >> 海尔刷机软件编写指南(二次修订版)(含极速刷机原理)
    海尔刷机软件编写指南(二次修订版)(含极速刷机原理)
    2010年03月29日 点击: 编辑: byzx
    (3.30重新修订,统一了其中的数值表示,凡是以H结尾的数字均为16进制,另外还修正了部分描述)

    软件应该首先打开串口,并设置成38400bps,N,8,1(一定要设置成这个参数),然后等待机顶盒发来联络字。

    打开机顶盒(以下称STB)后,STB会发送一个3A到软件,此时软件一定要回应,过几百分之一秒没回应的话,STB会进入正常的开机程序,面板会亮起来。


    要回应的内容只有一个字节,但至关重要!这个字节是你要发送的BOOT2代码的长度除以256后的向上取整值(目前对2023E基本上是0BH,因为BIN的长度是2791(0AE6H)字节,2023是2538(9EAH)字节,应该发0AH),发的不对的话,只有两种结果:下面的命令被吃掉(偏大),或者BOOT2传送不完整(偏小)!

    (重要遗漏:回应完上面的字节后,就直接将BOOT2灌入,中间无任何联络信号,不足(上面的字节*256)的部分要补FF,其实这可以通过监控记录看出来,高手不会受影响的)

    STB在收到BOOT2以后,会回应 3BH和3CH,然后执行BOOT2的程序。

    此时,可以向STB发出BOOT2能处理的命令,这些命令有:

    44H('D'): 读出数据
    43H('C'): 写入数据
    42H('B'): 擦除扇区
    41H('A'): 设置串行通信波特率

    本来还应该有一个命令叫'@'(40H),是获得芯片信息,不过目前的BOOT2.BIN中都不支持这个命令了(猜测原来支持,因为BOOT2程序代码中尚有这个功能的残骸)。估计是因为山寨FLASH流行,判断厂商和参数已经不太可能,就直接盲写了。

    发送命令时必须以'f'(66H)开头,然后跟随一串固定格式的数据,格式如下:

    1B     4B     数据块nB   1B
    X       Y       Z         U

    X=块长度,1 个字节,最大不能超过138(8AH)。
    Y=CRC32,4个字节,采用CRC32BitMpeg2。
    Z=要发送的数据,可多可少。
    U=块结束标记,不能大于101(65H)

    例如:发送一个擦除0x2000开始的扇区的命令如下:
    66 0A 5C DA 88 2C 42 00 00 20 00 65
    其中发完66H后要等待回应一个3CH,发完0AH后也一样,余下的一气发送,完成后应该能收到两个3CH。

    如果收到的是3DH,对不起,上一步出错了,请重新发送命令。

    例如要将128字节的数据写入0FDB00,封装完的包看起来像是下面这个样子:
    (8A是长度共138字节,0xF3E59ECA是随后数据的CRC32值,然后是写命令'C',再往后是32位地址,随后是128字节的数据,最后一字节是块结束标记)
    8A F3 E5 9E CA 43 00 0F DB 00 CC 06 2A 0F 86 0C 03 0E B2 09 1F 30 0F 12 2F 9C 3F 0F 27 0F 2D F3 0E E1 12 F7 3F CF 84 0B E6 17 E0 00 1F 84 40 D8 03 27 30 90 CF DC 16 44 01 26 33 F3 C0 02 85 33 F3 8B 0C FC C0 B4 F3 03 96 10 51 2D CB FC 9B CC 3C 0C 94 30 0F 2E 58 60 6C 0C D3 C0 3C 00 F9 3D F8 03 00 66 FC 30 30 0C 95 0F A8 60 90 01 17 30 C0 0A 5F 0D B0 1C 1D 02 04 20 3C 33 C0 04 3D 3A F9 20 FC 50 01 88 0A 90 00 FC 65

    读数据和发数据类似,典型的对话命令如下所示:([S]代表发送的数据,[R]代表接收的数据)
    [S]66
    [R]3C
    [S]0A
    [R]3C
    [S]CA 2B 1A 7F 44 00 10 00 00 65
    [R]3C
    [R] 89 ED 91 74 02 01 00 02 72 00 03 FF FF FF FF 02 72 00 0B FF FF FF FF 02 72 00 13 FF FF FF FF 02 72 00 1B FF FF FF FF 02 72 00 23 FF FF FF FF 02 72 00 2B FF FF FF FF 02 72 00 33 FF FF FF FF 02 72 00 3B FF FF FF FF 02 72 00 43 FF FF FF FF 02 72 00 4B FF FF FF FF 02 72 00 53 FF FF FF FF 02 72 00 5B FF FF FF FF 02 72 00 63 FF FF FF FF FF FF FF FF FF 11 03 07 22 FF FF FF FF FF FF FF FF FF FF FF FF

    就是没回来3CH,重新发读数据命令即可。回完3C后,接着是132字节的数据,其中前4个字节是CRC值。如果校验通过,说明接收的数据是对的,可以接着往下读或者发其它命令。

    最后一个问题是设置波特率,因为机顶盒的默认速率是38400,以这个速度刷机,那速度就太慢了,所以可以设置为115200或者更高,设置波特率的数据包如下所示:

    0A 7F 00 28 44 41 00 00 11 79 65 ;设置为115200
    如果想设置为280000bps,则上面的 11 79,应该修改为 2A 7A
    (注:STB支持3种速率,分别是9600,115200和280000)

    有了这些,估计就应该可以编了,希望软件高手们行动起来,尽快实现极速刷机。

    如果还有哪些方面不清楚,可以用ACCESSPORT监测ABS_Flasher软件的刷机过程。

    希望face早日出品带刷机功能的一体化工具。

    最后感谢Q大侠对BOOT2的研究成果。关于BOOT2的一些问题,我发在1楼,主要是怕帖超了长度发不出去,别抢我的1楼啊,还要说说极速刷机的事呢。
    赞助网站 | 关于我们 | 版权声明 | 站点导航 | 收藏本站 | 设为首页
    LCDHOME - LCD之家
    LCDHOME - LCD之家
    html/201003/44681.html
    欢迎来访LCDHOME论坛网