在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+16ans = 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));endsum_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 |