HDMI中checksum计算法

时间:2022-02-05 06:59:53

HDMI中checksum计算法

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

HDMI中checksum计算法

>> hex2dec('82')

ans =

   130

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

HDMI中checksum计算法

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

HDMI中checksum计算法

>> hex2dec('a6')

ans =

166

>> hex2dec('a8')

ans =

168

>> 166+17+168+16

ans =

   367

>> 367+145


ans =


512

 
HDMI中checksum计算法

这是第二组数据

HDMI中checksum计算法

HDMI中checksum计算法
>> hex2dec('b1')

ans =

   177

>> hex2dec('28')

ans =

    40

>> hex2dec('84')

ans =

   132

>> hex2dec('10')

ans =

    16

177+40+132+16+2 

ans =


367

 
HDMI中checksum计算法

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

HDMI中checksum计算法
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

HDMI中checksum计算法

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

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

HDMI中checksum计算法

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