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

  

原文地址:https://www.cnblogs.com/zhongguo135/p/9450334.html