android蓝牙通信和Hex文件解析升级

本文详细介绍了如何解析HEX文件进行蓝牙硬件升级,包括HEX文件的格式解析,Android端的代码实现,以及蓝牙通信的注意事项。解析过程中涉及到16进制与10进制转换、数据重组、字节流处理等技术。最后,文章提到了硬件数据格式要求和蓝牙SDK的集成使用。
摘要由CSDN通过智能技术生成

针对蓝牙硬件里的软件程序包HEX文件解析和升级

1、思路
    
    选择手机中的HEX升级包文件,比如(/Download下的 update.hex),
    然后通过java读取文件每一行获取每一行的数据,然后根据HEX文件数据的规则来解析,
    
    hex文件数据:
        
        1
    
    hex文件规则:HEX文件格式解析_hex是只有256-CSDN博客
                 https://www.cnblogs.com/blogzhangwei/p/8781183.html
                 Hex文件格式解析_bin转hex 源代码c-CSDN博客
                 
2、hex文件中数据要注意的有:
    
    比如:
    
        :020000040800F2
        :04BFF00003000156F3
        :020000040800F2
        :10C00000806B002039C1000869F200083DE5000896
        :10C0100065F20008B9DA0008F91F01080000000005
        :106B20003C2910191729102988E9782A543CF100CA
        :040000050800C12509
        :00000001FF
        
    格式:
        
        :020000040800F2 , 其实就是字节串: 0x02 0x00 0x00 0x04 0x08 0x00 0xF2
        
        第一个 0x02 为数据长度。
      紧跟着后面的0x00 0x00 为地址。
      再后面的0x04为数据类型,类型共分以下几类:
      '00' Data Record
      '01' End of File Record
      '02' Extended Segment Address Record
      '03' Start Segment Address Record
      '04' Extended Linear Address Record
      '05' Start Linear Address Record
      然后,接着0x04后面的两个 0x00 0x00就是数据。最后一个0xFA是校验码。
    
    
    解析:也就是说每一行的数据格式是:[数据长度1Byte]、[数据地址2Byte]、[数据类型1Byte]、[数据nByte]、[校验1Byte]
    
        原数据【:020000040800F2】
        解析:【02  0000  04 0800 F2】  04是段地址数据行
        
        原数据【:04BFF00003000156F3】
        解析:【04  BFF0  00  03000156 F3】 00是有效数据,取的是00后面的4个字节03000156
        
        原数据【:020000040800F2】
        解析:【02  0000  04 0800 F2】  04是段地址数据行
        
        原数据【:10C00000806B002039C1000869F200083DE5000896】
        解析:【10  C000  00 806B002039C1000869F200083DE50008 96】 
               C000是偏移地址,00是有效数据,取的是00后面的16(10转16进制)个字节806B002039C1000869F200083DE50008
        
        原数据【:10C0100065F20008B9DA0008F91F01080000000005】
        解析:【10  C010  00 65F20008B9DA0008F91F010800000000 05】  
               C010是偏移地址,00是有效数据,取的是00后面的16(10转16进制)个字节65F20008B9DA0008F91F010800000000
        
        原数据【:106B20003C2910191729102988E9782A543CF100CA】
        解析:【10  6B20  00 3C2910191729102988E9782A543CF100 CA】  
               6B20是偏移地址,00是有效数据,取的是00后面的16(10转16进制)个字节3C2910191729102988E9782A543CF100
        
        原数据【:040000050800C12509】
        解析:【04  0000  05 0800C125 09】  05是开始行地址记录,一般不会对05数据处理
        
        原数据【:00000001FF】
        解析:【00  0000  01 FF】  01是文件结束标志行

        
3、文件解析的android端代码:(解析部分重点)

     /**
     * 解析HEX文件,读取每行并拆解成数据对象(包括第一行段地址)
     * @param filePath      String
     * @return              List<FileStruct>
     */
    private static List<FileStruct> analysisFile(String filePath) {
        File tempFile = new File(filePath);
        List<FileStruct> fileStructList = new ArrayList<>();
        InputStream inputStream = null;
        BufferedReader bufferedReader = null;
        try {
            inputStream = new FileInputStream(tempFile);
            //转成 reader 以 行 为单位

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漠天515

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值