zoukankan      html  css  js  c++  java
  • HDMI中checksum计算法

     

     在AVI传输过程中有三个字节没有被传输。这是在HDMI1.4B中找到的前三个字节的数据。

    >> hex2dec('82')
    
    ans =
    
       130

     

    下图中的数据中在HDMI中接收到的一串数据,最低位A6是校验位,把第一个字节相加,然后再加上前面的三个字节的数据,刚好是512,正好是256的位数,这说明我有猜想是正确的。

    166(a6h)+17(11h) + 168(a8h) + 16(10h) = 

    复制代码

    >> hex2dec('a6')

    ans =

    166

    >> hex2dec('a8')

    ans =

    168


    >> 166+17+168+16 ans = 367

    >> 367+145

    
    

    ans =

    
    

    512

     
    复制代码

    这是第二组数据

    复制代码
    >> hex2dec('b1')
    
    ans =
    
       177
    
    >> hex2dec('28')
    
    ans =
    
        40
    
    >> hex2dec('84')
    
    ans =
    
       132
    
    >> hex2dec('10')
    
    ans =
    
        16

    177+40+132+16+2

    ans =

    
    

    367

     
    复制代码

     下面是写的一个Matlab小程序实现校验值求法

    复制代码
    function checksum = checksum_128b(varargin)
    %%输入是所有字节,输入的每个字节要求为16进制数据
    %输出是校验值,校验值是16进制
    nVararg = length(varargin);
    for i = 1:nVararg
        data(i) = hex2dec(varargin(i));
    end
    sum_data = sum(data);
     
    checksum = 256 - mod(sum_data,256 );
    checksum =dec2hex(checksum);
    以第一个例子来看下

    >> checksum_128b('82','02','0d','11','a8','10')

    ans =

    A6

    复制代码

     在应用Altera HDMI IP的过程中,虽然没有提供数据包的Header部分,但是在实际的计算中一定要从HDMISpecification中找到相应的部分,再计算检验码。

    比如下面语音数据包的头部分。一开始没用加上Header部分,计算出的结果是E6H,但是与接收到的部分不一样,原来它的计算过程中是添加了Header,正确的结果为57H

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >> checksum_128b('09','11')
     
    ans =
     
    E6
     
     
    >> checksum_128b('09','11','84','01','0a')
     
    ans =
     
    57

      

  • 相关阅读:
    函数
    字符串格式化
    集合
    习题02
    int/str/list/tuple/dict必会
    元组/字典
    列表方法
    练习题(format、expandtabs、片层)
    字符串方法
    JMM
  • 原文地址:https://www.cnblogs.com/zhongguo135/p/9450334.html
Copyright © 2011-2022 走看看