自己診断テスト サンプルソフトウエア

自己診断テスト用サンプルソフトウェア説明書
SP-870-102
自己診断テスト
サンプルソフトウェア
Rev 1.0
2008 年 8 月
z
当社は品質、信頼性の向上に努めておりますが、一般に半導体製品は誤作動したり故障することがあります。当社半導
体製品をご使用いただく場合は、半導体製品の誤作動や故障により、生命・身体・財産が侵害されることのないように、購
入者側の責任において、機器の安全設計を行うことをお願いします。
なお、設計に際しては、最新の製品仕様をご確認の上、製品保証範囲内でご使用いただくと共に、考慮されるべき注意事
項や条件について「東芝半導体製品の取り扱い上のご注意とお願い」、「半導体信頼性ハンドブック」などでご確認くださ
い。
z 本資料に掲載されている製品は、一般的電子機器 (コンピュータ、パーソナル機器、事務機器、計測機器、産業用ロボ
ット、家電機器など) に使用されることを意図しています。特別に高い品質・信頼性が要求され、その故障や誤作動が直
接人命を脅かしたり人体に危害を及ぼす恐れのある機器(原子力制御機器、航空宇宙機器、輸送機器、交通信号機器、燃
焼制御、医療機器、各種安全装置など) にこれらの製品を使用すること (以下
特定用途 という) は意図もされてい
ませんし、また保証もされていません。本資料に掲載されている製品を当該特定用途に使用することは、お客様の責任で
なされることとなります。
z 本製品の使用または,使用不能により生ずる付随的な損害(事業利益の損失,事業の中断、事業情報の損失,またはそ
の他の金銭的損失を含むがこれらに限定されない)に関して当社は一切の責任を負いかねます。
z 本資料に掲載されている製品は、外国為替および外国貿易法により、輸出または海外への提供が規制されているもので
す。
z 本資料に掲載されている技術情報は、製品の代表的動作・応用を説明するためのもので、その使用に際して当社および
第三者の知的財産権その他の権利に対する保証または実施権の許諾を行うものではありません。
z 本資料に掲載されている製品を、国内外の法令、規則および命令により製造、販売を禁止されている応用製品に使用す
ることはできません。
z
本資料の掲載内容は、技術の進歩などにより予告なしに変更されることがあります。
1
自己診断テスト用サンプルソフトウェア説明書
目次
1.概要 ...................................................................................... 3
2.サンプルプログラムの概要................................................................... 3
2.1 RAM メモリテスト(0x55,0xAA の R/W テスト) ............................................ 3
2.2 RAM メモリテスト(March-C テスト) ................................................... 3
2.3 チェックサム計算..................................................................... 3
2.4 CRC 計算(CRC-CCITT) ................................................................ 3
3.プログラム内容............................................................................. 4
3.1 RAMメモリテスト(0x55,0xAA の R/W テスト) ......................................... 4
3.2 RAMメモリテスト(March-C テスト) ................................................. 8
3.3 チェックサム計算.................................................................... 16
3.4 CRC計算(1).................................................................... 18
3.5 CRC計算(2).................................................................... 21
4.概略フローチャート........................................................................ 25
5.補足 ..................................................................................... 28
5.1 数値表現............................................................................ 28
5.2
用語.............................................................................. 28
2
自己診断テスト用サンプルソフトウェア説明書
1.概要
このサンプルプログラムは TLCS-870/C1 シリーズ用です。
このサンプルプログラムは各種の自己診断テスト用です。このサンプルプログラムの一部を取り
出して再利用することで、希望するテストを実施することができます。
2.サンプルプログラムの概要
サンプルプログラムは、それぞれのモジュールに対してC言語、及びアセンブリ言語で記述した
ものがあります。
・C言語:
tml.c 及び tml.h の2つのソースファイルからなります。使用する関数、定義宣言を取
り出して使用してください。
メモリテスト関連(0x55/0xAA RW test、March-c test)に関しては、ご使用になるコ
ンパイラによっては、意図したテストが行なわれない可能性がありますので、コンパ
イルされたアセンブラリストを確認するようにして下さい。
・アセンブリ言語:
tml.asm 及び tml.h の2つのソースファイルからなります。使用するモジュール、定義
宣言を取り出して使用してください。
アセンブリ言語で記述されたモジュールはC言語とのインターフェイスが考慮されて
います。C言語のソースから、サンプルプログラムのモジュールを呼び出す場合は、
関数タイプを __adcel とすることで利用することが出来ます。
2.1
RAM メモリテスト(0x55,0xAA の R/W テスト)
指定された RAM エリア(スタックエリアを除く)に対しての 0x55、0xAA の Read/Write テ
ストを行います。
2.2
RAM メモリテスト(March-C テスト)
指定された RAM エリア(スタックエリアを除く)に対して、March-C でのテストを行います。
March-C テストパターンは以下のように定義されます。
・指定されたエリアすべてに0を書き込む。
・アドレス全体にわたって増分しながら、0を読み取り1を書き込む。
・アドレス全体にわたって増分しながら、1を読み取り0を書き込む。
・アドレス全体にわたって減分しながら、0を読み取り1を書き込む。
・アドレス全体にわたって減分しながら、1を読み取り0を書き込む。
・指定されたエリアから0を読み取る。
2.3
チェックサム計算
指定されたメモリエリアに対して、1byte 毎に加算したチェックサムを計算を行います。
チェックサムは 16bit で表されます。
RAM/ROM データの整合性確認や、データ送受信における誤り検出などに用いることが出来ま
す。但しデータの順序が入れ替わるなどした場合は、計算結果が同じになり、誤り検出が
できませんので、より検出精度を求める場合は CRC 等他の方法を検討してください。
2.4
CRC 計算(CRC-CCITT)
指定された RAM/ROM エリアの巡回冗長検査(CRC)を計算します。
サンプルプログラムの初期値は 0xFFFF 、生成多項式は x16+x12+x5+x0
3
です
自己診断テスト用サンプルソフトウェア説明書
3.プログラム内容
3.1
RAMメモリテスト(0x55,0xAA の R/W テスト)
指定された RAM エリア(スタックエリアを除く)に対しての 0x55、0xAA の Read/Write テス
トを行います。
RAM エリアは開始アドレス、及びバイト数を指定します。バイト数は偶数でなければいけませ
ん。テストする RAM エリアの内容は保持されますが、割込みなど他の処理系で変更される可
能性のあるものについては、この限りではありません。
= C 言語 =
tml_ram_test_cb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
function call
BOOL tml_ram_test_cb(volatile unsigned char *adr, unsigned int byte)
parameter 1
volatile unsigned char *adr
テスト開始アドレス
parameter 2
unsigned int byte
テストバイト数 (1∼65535)
return value
BOOL
TML_NO_ERROR:(1)no erro
TML_ERROR :(0)error
/********************************************************************
* NAME : tml_ram_test_cb
*-------------------------------------------------------------------* PARAMETER : PARAMETER 1 address pointer on first data
*
PARAMETER 2 length of the byte
*
* RETURN VALUE : error infomation (TML_ERROR:error / TML_NO_ERROR:no error)
* DESCRIPTION : The R/W check of 0x55/0xAA in the specified range
*
*********************************************************************/
#pragma optimize_off tml_ram_test_cb
/* optimization restraint */
/* note ) specification bytes be an even number! */
BOOL tml_ram_test_cb(volatile unsigned char *adr,unsigned int byte)
{
BOOL err = TML_NO_ERROR;
/* set no error */
unsigned char data_backup[2];
for ( ; byte>0; byte-=2){
data_backup[0] = *adr;
data_backup[1] = *(adr+1);
/* save of the date */
*adr = 0x55;
/* The writing in check of 0x55, 0xaa */
*(adr+1) = 0xaa;
if ((*adr == 0x55) && (*(adr+1) == 0xaa)){
}else{
err = TML_ERROR;
/* set error */
}
*adr = 0xaa;
/* The writing in check of 0xaa, 0x55 */
*(adr+1) = 0x55;
if ((*adr == 0xaa) && (*(adr+1) == 0x55)){
}else{
err = TML_ERROR;
/* set error */
}
*adr = data_backup[0];
*(adr+1) = data_backup[1];
/* restore of the data */
adr+=2;
}
return (err);
4
自己診断テスト用サンプルソフトウェア説明書
42
}
1
2
3
4
5
/********************************************************************
* Example : tml_ram_test_cb
********************************************************************/
/* 0x100∼0x110 check! */
error = tml_ram_test_cb((unsigned char *)0x0100, 0x0010);
使用例
5
自己診断テスト用サンプルソフトウェア説明書
= アセンブリ言語 =
.tml_ram_test_cb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
47
parameter 1
WA register
テスト開始アドレス
parameter 2
BC register
テストバイト数(1∼65535)
return value
A register
TML_NO_ERROR:(1)no erro
TML_ERROR :(0)error
used register
WA,BC,IX,IY register
Code Size
67 byte
Use Stack Size
2 byte
;********************************************************************
;* NAME : .tml_ram_test_cb
;*-------------------------------------------------------------------;* PARAMETER : WAreg. address pointer on first data
;*
BCreg. length of the byte
;*
;* RETURN VALUE : Areg. error infomation (TML_ERROR:error / TML_NO_ERROR:no error)
;* USE REGISTER : WA,BC,IX,IY
;* DESCRIPTION : The R/W check of 0x55/0xAA in the specified range
;*
;*********************************************************************
PUBLIC
.tml_ram_test_cb
.tml_ram_test_cb:
PUSH
DE
LD
IX,WA
LD
A,TML_NO_ERROR
CMP
BC,0
J
T,ram_cb_end
ram_cb_s1:
LD
DE,(IX)
LD
(IX),0x55
LD
(IX+1),0xAA
CMP
(IX),0x55
J
F,ram_cb_err1
CMP
(IX+1),0xAA
J
T,ram_cb_s2
ram_cb_err1:
LD
A,TML_ERROR
ram_cb_s2:
LD
(IX),0xAA
LD
(IX+0x1),0x55
CMP
(IX),0xAA
J
F,ram_cb_err2
CMP
(IX+0x1),0x55
J
T,ram_cb_s3
ram_cb_err2:
LD
A,TML_ERROR
ram_cb_s3:
LD
(IX),DE
ADD
IX,2
SUB
BC,2
CMP
BC,0
J
F,ram_cb_s1
ram_cb_end:
POP
DE
RET
;
;
;
;
DE on Stack
IX:Address
Error Inf. Clear
length check
;
;
;
;
;
;
;
Backup Data
0x55 Write
0xAA Write
Read check
Read check
; Set Error
;
;
;
;
;
;
0xAA Write
0x55 Write
Read Check
Read Check
; Set Error
;
;
;
;
;
Reatore Data
Next Address
Counter decrement
finish ?
else JP
; Restore DE
6
自己診断テスト用サンプルソフトウェア説明書
使用例
1
2
3
4
5
6
7
;********************************************************************
;* Example : .tml_ram_test_cb
;********************************************************************
; 0x100∼0x110 check!!
LD
WA,0x0100
LD
BC,0x0010
CALL
.tml_ram_test_cb
7
自己診断テスト用サンプルソフトウェア説明書
3.2
RAMメモリテスト(March-C テスト)
指定された RAM エリア(スタックエリアを除く)に対しての March-C でのテストを行います。
RAM エリアは開始アドレス、及びバイト数を指定します。
テストする RAM エリアの内容は保持されませんので、保持する必要がある場合は、テスト RA
M エリアのデータの退避、及びテスト終了後のデータ復帰処理を行う必要があります。
= C 言語 =
tml_ram_test_marchc
function call
BOOL tml_ram_test_marchc(volatile unsigned char *adr,unsigned int byte)
parameter 1
volatile unsigned char *adr
テスト開始アドレス
parameter 2
unsigned int byte
テストバイト数(1∼65535)
return value
BOOL
TML_NO_ERROR:(1)no erro
TML_ERROR :(0)error
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/*********************************************************************
* NAME : tml_ram_test_marchc
*-------------------------------------------------------------------* PARAMETER : PARAMETER 1 address pointer on first data
*
PARAMETER 2 length of the byte
*
* RETURN VALUE : error infomation (TML_ERROR:error / TML_NO_ERROR:no error)
* DESCRIPTION : March-C in the specified range The test
*
*********************************************************************/
#pragma optimize_off tml_ram_test_marchc
/* optimization restraint */
BOOL tml_ram_test_marchc(volatile unsigned char *adr,unsigned int byte)
{
BOOL err = TML_NO_ERROR;
/* set no error */
volatile unsigned char *stop_adr;
unsigned int i;
stop_adr = (volatile unsigned char*)(adr + byte -1);
/* set end address */
/* The RAM clearance by the check range */
for (i=0;i<byte;i++){
*(adr+i) = 0x00;
}
/* The W/R check of "1" from the address head / the lower rank bit */
for (i=0;i<byte;i++){
if (TML_ERROR == bitchk_r0_w1(adr+i)){
err = TML_ERROR;
/* set error */
}
}
/* The W/R check of "0" from the address head / the lower rank bit */
for (i=0;i<byte;i++){
if (TML_ERROR == bitchk_r1_w0(adr+i)){
err = TML_ERROR;
/* set error */
}
}
/* The W/R check of "1" from the address lower rank / the lower rank bit */
for (i=0;i<byte;i++){
if (TML_ERROR == bitchk_r0_w1(stop_adr-i)){
err = TML_ERROR;
/* set error */
}
}
8
自己診断テスト用サンプルソフトウェア説明書
45
/* The W/R check of "0" from the address lower rank / the lower rank bit */
46
for (i=0;i<byte;i++){
47
if(TML_ERROR ==bitchk_r1_w0(stop_adr-i)){
48
err = TML_ERROR;
/* set error */
49
}
50
}
51
52
/* The check area is the confirmation of ALL"0" */
53
for (i=0;i<byte;i++){
54
if (*adr != 0x00){
55
err = TML_ERROR;
/* set error */
56
}
57
adr++;
58
}
59
60
return(err);
61
62 }
-内部関数/*--------- static function (uses at tml_ram_test_marchc()) -----------*/
1
/*
2
*********************************************************************
3
* NAME : bitchk_r0_w1
4
*-------------------------------------------------------------------5
* PARAMETER : PARAMETER 1 address pointer
6
*
7
* RETURN VALUE : error (TML_ERROR:error / TML_NO_ERROR:no error)
8
* DESCRIPTION : W/R check of "1"
6
*
7
*********************************************************************
8
*/
9
/* optimization restraint */
10 #pragma optimize_off bitchk_r0_w1
11 static BOOL bitchk_r0_w1(volatile unsigned char *adr)
12 {
BOOL err = TML_NO_ERROR;
/* set no error */
13
14
if (*adr != 0x00){
/* all "0" check */
15
err = TML_ERROR;
/* set error */
16
}
17
18
*adr ¦= 0x01;
/* set of the 0th bit */
19
if (*adr != 0x01){
20
err = TML_ERROR;
/* set error */
21
}
22
*adr ¦= 0x02;
/* set of the 1st bit */
23
if (*adr != 0x03){
24
err = TML_ERROR;
/* set error */
25
}
26
*adr ¦= 0x04;
/* set of the 2nd bit */
27
if (*adr != 0x07){
28
err = TML_ERROR;
/* set error */
29
}
30
*adr ¦= 0x08;
/* set of the 3rd bit */
31
if (*adr != 0x0F){
32
err = TML_ERROR;
/* set error */
33
}
34
*adr ¦= 0x10;
/* set of the 4th bit */
35
if (*adr != 0x1F){
36
err = TML_ERROR;
/* set error */
37
}
38
*adr ¦= 0x20;
/* set of the 5th bit */
39
if (*adr != 0x3F){
40
err = TML_ERROR;
/* set error */
41
}
42
*adr ¦= 0x40;
/* set of the 6th bit */
43
if (*adr != 0x7F){
44
err = TML_ERROR;
/* set error */
45
}
46
9
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
*adr ¦= 0x80;
if (*adr != 0xFF){
err = TML_ERROR;
}
自己診断テスト用サンプルソフトウェア説明書
/* set of the 7th bit */
/* set error */
return(err);
}
/*
*********************************************************************
* NAME : bitchk_r1_w0
*-------------------------------------------------------------------* PARAMETER : PARAMETER 1 address pointer
*
* RETURN VALUE : error (TML_ERROR:error / TML_NO_ERROR:no error)
* DESCRIPTION : W/R check of "0"
*
*********************************************************************
*/
#pragma optimize_off bitchk_r1_w0
/* optimization restraint */
static BOOL bitchk_r1_w0(volatile unsigned char *adr)
{
BOOL err = TML_NO_ERROR;
/* set no error */
if (*adr != 0xFF){
err = TML_ERROR;
}
/* all "1" check */
/* set error */
*adr &= 0xFE;
if (*adr != 0xFE){
err = TML_ERROR;
}
*adr &= 0xFD;
if (*adr != 0xFC){
err = TML_ERROR;
}
*adr &= 0xFB;
if (*adr != 0xF8){
err = TML_ERROR;
}
*adr &= 0xF7;
if (*adr != 0xF0){
err = TML_ERROR;
}
*adr &= 0xEF;
if (*adr != 0xE0){
err = TML_ERROR;
}
*adr &= 0xDF;
if (*adr != 0xC0){
err = TML_ERROR;
}
*adr &= 0xBF;
if (*adr != 0x80){
err = TML_ERROR;
}
*adr &= 0x7F;
if (*adr != 0x00){
err = TML_ERROR;
}
/* clear of the 0th bit */
/* set error */
/* clear of the 1st bit */
/* set error */
/* clear of the 2nd bit */
/* set error */
/* clear of the 3rd bit */
/* set error */
/* clear of the 4th bit */
/* set error */
/* clear of the 5th bit */
/* set error */
/* clear of the 6th bit */
/* set error */
/* clear of the 7th bit */
/* set error */
return(err);
}
10
自己診断テスト用サンプルソフトウェア説明書
使用例
1
2
3
4
5
/********************************************************************
* Example : tml_ram_test_marchc
********************************************************************/
/* 0x100∼0x110 check!! */
error = tml_ram_test_marchc ((unsigned char *)0x0100, 0x0010);
11
自己診断テスト用サンプルソフトウェア説明書
= アセンブリ言語 =
.vde_ram_test_marchc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
parameter 1
WA register
テスト開始アドレス
parameter 2
BC register
テストバイト数(1∼65535)
return value
A register
TML_NO_ERROR:(1)no erro
TML_ERROR :(0)error
used register
WA,BC,IX,IY register
code size
241 byte
stack size
7 byte
;*********************************************************************
;* NAME : .tml_ram_test_marchc
;*-------------------------------------------------------------------;* PARAMETER : WAreg. address pointer on first data
;*
BCreg. length of the byte
;*
;* RETURN VALUE : Areg. error infomation (TML_ERROR:error / TML_NO_ERROR:no error)
;* USE REGISTER : WA,BC,IX,IY
;* DESCRIPTION : March-C in the specified range The test
;*********************************************************************
PUBLIC
.tml_ram_test_marchc
.tml_ram_test_marchc:
PUSH
HL
PUSH
DE
; Stack on HL
; Stack on DE
LD
LD
ADD
DEC
HL,WA
DE,HL
HL,BC
HL
; WA:Start Address
; DE:Start Address
;
; HL:End Address
CMP
J
LD
J
BC,0
F,ram_mc_start
B,TML_NO_ERROR
ram_mc_step_12
; length check
;
ram_mc_start:
LD
B,TML_NO_ERROR
;***** zero clear *******
ram_mc_step_0:
LD
(DE),0
CMP
HL,DE
J
T,ram_mc_step_1
INC
DE
J
ram_mc_step_0
; error inf.
;
;
;
;
;
All ZERO set
ZERO Store
Clear End
then JP
Addess increment
;***** 1-write from lower address ******
ram_mc_step_1:
;
LD
DE,WA
; DE:Start Address
ram_mc_step_2:
CAL
CMP
J
INC
J
.bitchk_r0_w1
HL,WA
T,ram_mc_step_3
WA
ram_mc_step_2
;
; 0-Read / 1-Write : error output is B
; End
;
then jp
; Addess increment
;***** 0-write from lower address ******
ram_mc_step_3:
;
LD
WA,DE
; WA:Start Address
12
自己診断テスト用サンプルソフトウェア説明書
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
102
102
103
104
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ram_mc_step_4:
CAL
CMP
J
INC
J
.bitchk_r1_w0
HL,WA
T,ram_mc_step_5
WA
ram_mc_step_4
;
; 1-Read / 0-Write : error output is B
; End
;
then jp
; Addess increment
;***** 1-write from upper address ******
ram_mc_step_5:
PUSH
DE
LD
DE,HL
; DE:End Adddress
POP
HL
; HL:Start Address
LD
WA,DE
; WA:End Address
ram_mc_step_6:
CAL
.bitchk_r0_w1
; 0-Read / 1-Write : error output is B
CMP
J
DEC
J
WA,HL
T,ram_mc_step_7
WA
ram_mc_step_6
;***** 0-write from lower upper ******
ram_mc_step_7:
LD
WA,DE
ram_mc_step_8:
CAL
CMP
J
DEC
J
.bitchk_r1_w0
WA,HL
T,ram_mc_step_9
WA
ram_mc_step_8
; End
;
then JP
; Addess decrement
;
;
; WA:End Address
;
; 1-Read / 0-Write : error output is B
; End
;
then JP
; Addess decrement
;***** All 0 check ******
ram_mc_step_9:
LD
ram_mc_step_10:
CMP
J
LD
ram_mc_step_11:
CMP
J
INC
J
WA,DE
; WA:End Address
(HL),0
; data == 0
T,ram_mc_step_11 ; then JP
B,TML_ERROR
; Error
WA,HL
; finish ?
T,ram_mc_step_12 ; then JP
HL
; Addess increment
ram_mc_step_10
ram_mc_step_12:
LD
A,B
; Areg:return
POP
DE
; Restore DE
POP
HL
; Restore HL
RET
-内部関数;/*--------- static function (uses at tml_ram_test_marchc()) -----------*/\
;***************************************************
;* NAME : bitchk_r0_w1
;*-------------------------------------------------;* PARAMETER
: WAreg. address pointer
;* RETURN VALUE : Breg. error infomation(TML_ERROR:error / TML_NO_ERROR:no error)
;***************************************************
.bitchk_r0_w1:
LD
IY,WA
CMP
(IY),0y00000000
;all "0" check
J
T,W1_1
LD
B,TML_ERROR
;set error
W1_1:
SET
(IY).0
;set of the 0th bit
13
自己診断テスト用サンプルソフトウェア説明書
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
CMP
J
LD
(IY),0y00000001
T,W1_2
B,TML_ERROR
SET
CMP
J
LD
(IY).1
(IY),0y00000011
T,W1_3
B,TML_ERROR
;set of the 1st bit
SET
CMP
J
LD
(IY).2
(IY),0y00000111
T,W1_4
B,TML_ERROR
;set of the 2nd bit
SET
CMP
J
LD
(IY).3
(IY),0y00001111
T,W1_5
B,TML_ERROR
;set of the 3rd bit
SET
CMP
J
LD
(IY).4
(IY),0y00011111
T,W1_6
B,TML_ERROR
;set of the 4th bit
SET
CMP
J
LD
(IY).5
(IY),0y00111111
T,W1_7
B,TML_ERROR
;set of the 5th bit
SET
CMP
J
LD
(IY).6
(IY),0y01111111
T,W1_8
B,TML_ERROR
;set of the 6th bit
SET
CMP
J
LD
(IY).7
(IY),0y11111111
T,W1_END
B,TML_ERROR
;set of the 7th bit
;set error
W1_2:
;set error
W1_3:
;set error
W1_4:
;set error
W1_5:
;set error
W1_6:
;set error
W1_7:
;set error
W1_8:
;set error
W1_END:
RET
;***************************************************
;* NAME : bitchk_r1_w0
;*-------------------------------------------------;* PARAMETER
: WAreg. address pointer
;* RETURN VALUE : Breg. error (TML_ERROR:error / TML_NO_ERROR:no error)
;***************************************************
.bitchk_r1_w0:
LD
IY,WA
CMP
(IY),0y11111111
;all "1" check
J
T,W0_1
LD
B,TML_ERROR
;set error
W0_1:
CLR
(IY).0
;clear of the 0th bit
CMP
(IY),0y11111110
J
T,W0_2
LD
B,TML_ERROR
;set error
W0_2:
CLR
(IY).1
;clear of the 1st bit
CMP
(IY),0y11111100
J
T,W0_3
LD
B,TML_ERROR
;set error
W0_3:
CLR
(IY).2
;clear of the 2nd bit
CMP
(IY),0y11111000
14
自己診断テスト用サンプルソフトウェア説明書
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
1
2
3
4
5
J
LD
T,W0_4
B,TML_ERROR
CLR
CMP
J
LD
(IY).3
(IY),0y11110000
T,W0_5
B,TML_ERROR
;clear of the 3rd bit
CLR
CMP
J
LD
(IY).4
(IY),0y11100000
T,W0_6
B,TML_ERROR
;clear of the 4th bit
CLR
CMP
J
LD
(IY).5
(IY),0y11000000
T,W0_7
B,TML_ERROR
;clear of the 5th bit
CLR
CMP
J
LD
(IY).6
(IY),0y10000000
T,W0_8
B,TML_ERROR
;clear of the 6th bit
CLR
CMP
J
LD
(IY).7
(IY),0y00000000
T,W0_END
B,TML_ERROR
;clear of the 7th bit
;set error
W0_4:
;set error
W0_5:
;set error
W0_6:
;set error
W0_7:
;set error
W0_8:
;set error
W0_END:
RET
使用例
;********************************************************************
;* Example : .tml_ram_test_marchc
;********************************************************************
; 0x100∼0x110 check!!
LD
WA,0x0100
LD
BC,0x0010
CALL
.tml_ram_test_marchc
; Areg=0 then OK:
15
自己診断テスト用サンプルソフトウェア説明書
3.3
チェックサム計算
指定されたメモリエリアのチェックサム計算(1 バイト毎の加算)を行ないます。
メモリエリアの指定は開始アドレス、及びバイト数を指定します。計算中はメモリエリアの
データが割込みなど他の処理系で変更されないようにして下さい。
= C 言語 =
tml_chksum
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1
2
3
4
5
function call
BOOL tml_chksum(const unsigned char *adr, unsigned int byte)
parameter 1
const unsigned char *adr
テスト開始アドレス
parameter 2
unsigned int byte
テストバイト数(1∼65535)
return value
unsigned int
計算結果
/*********************************************************************
* NAME : tml_chksum
*-------------------------------------------------------------------* PARAMETER : PARAMETER 1 address pointer on first data
*
PARAMETER 2 length of the byte
*
* RETURN VALUE : checksum data
* DESCRIPTION : The computation of the checksum in the specified range
*
*********************************************************************/
unsigned int tml_chksum(const unsigned char *adr,unsigned int size)
{
unsigned int cnt;
unsigned int data=0;
for(cnt=0; cnt<size; cnt++){
data = data + *adr;
adr++;
}
return (data);
/* adds a specified range */
}
使用例
/********************************************************************
* Example : tml_chksum
********************************************************************/
/* 0x100∼0x110 calc.!! */
error = tml_chksum((unsigned char *)0x0100, 0x0010);
16
自己診断テスト用サンプルソフトウェア説明書
= アセンブリ言語 =
.tml_chksum
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
1
2
3
4
5
6
7
parameter 1
WA register
テスト開始アドレス
parameter 2
BC register
テストバイト数(1∼65535)
return value
WA register
計算結果
used register
WA,IX,IY register
code size
29 byte
stack size
2 byte
;*********************************************************************
;* NAME : .tml_chksum
;*-------------------------------------------------------------------;* PARAMETER : WAreg. address pointer on first data
;*
BCreg. length of the byte
;*
;* RETURN VALUE : WAreg. checksum data
;* USE REGISTER : WA,IX,IY
;* DESCRIPTION : The computation of the checksum in the specified range
;*
;*********************************************************************
PUBLIC
.tml_chksum:
PUSH
LD
LD
LD
CMP
J
chksum_n:
LD
LD
ADD
INC
INC
CMP
J
chksum_end:
POP
RET
.tml_chksum
DE
IX,WA
WA,0x0000
IY,0x0000
BC,0x0
LE,chksum_end
;
;
;
;
;
DE on Stack
IX:Address
clear chksum data
clear counter
length check
E,(IX)
D,0x0
WA,DE
IX
IY
IY,BC
LT,chksum_n
;
;
;
;
;
;
;
read memory
DE
; Restore DE
store chksum
address increment
counter increment
finish ?
else JP
使用例
;********************************************************************
;* Example : .tml_chksum
;********************************************************************
; 0x100∼0x110 calc.!!
LD
WA,0x0100
LD
BC,0x0010
CALL
.tml_chksum
17
自己診断テスト用サンプルソフトウェア説明書
3.4
CRC計算(1)
指定されたメモリエリアの CRC 計算を行ないます。
メモリエリアの指定は開始アドレス、及びバイト数を指定します。計算中はメモリエリアの
データが割込みなど他の処理系で変更されないようにして下さい。
サンプルプログラムの生成多項式は x16+x12+x5+x0(CRC-CCITT)
、初期値は 0xffff となって
います。
= C 言語 =
tml_crc
function call
unsigned int tml_crc(const unsigned char *adr ,unsigned int byte)
parameter 1
const unsigned char *adr
開始アドレス
parameter 2
unsigned int byte
バイト数(1∼65535)
return value
unsigned int
計算結果
*********************************************************************
1
* NAME : tml_crc
2
*-------------------------------------------------------------------3
* PARAMETER : PARAMETER 1 address pointer on first data
4
*
PARAMETER 2 length of the byte
5
*
6
* RETURN VALUE : CRC data
7
* DESCRIPTION : The CRC-CCITT computation(general version)
8
*
9
10 *********************************************************************/
11 unsigned int tml_crc(const unsigned char *adr ,unsigned int byte)
12 {
/* first value */
13 unsigned int crc=0xffff;
14 unsigned int i;
15 unsigned char j;
16
for (i=0; i<byte; i+=1) {
17
crc ^= adr[i] << 8;
18
for(j=0;j<8;j+=1) {
19
if(crc & 0x8000){
20
crc = (crc << 1) ^ 0x1021;
21
}else{
22
crc = crc << 1;
23
}
24
}
25
}
26
return crc;
27
28 }
*)初期値、生成多項式を変更したい場合は、13 行目、21 行目の値を変更してください。
1
2
3
4
5
使用例
/********************************************************************
* Example : .tml_crc
********************************************************************/
/* 0x100∼0x110 */
crc = tml_crc((unsigned char *)0x0100, 0x0010);
18
自己診断テスト用サンプルソフトウェア説明書
= アセンブリ言語 =
.tml_crc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
parameter 1
WA register
テスト開始アドレス
parameter 2
BC register
テストバイト数(1∼65535)
return value
WA register
計算結果
used register
WA,BC,IX,IY register
code size
66 byte
stack size
4 byte
;*********************************************************************
;* NAME : tml_crc
;*-------------------------------------------------------------------;* PARAMETER : WAreg. address pointer on first data
;*
BCreg. length of the byte
;* RETURN VALUE : Areg. CRC data
;*
;* USE REGISTER : WA,BC,IX,IY
;* DESCRIPTION : The CRC-CCITT computation(general version)
;*
;*********************************************************************
PUBLIC
.tml_crc:
PUSH
PUSH
LD
LD
LD
CMP
J
tml_crc_1:
LD
ADD
LD
LD
LD
LD
tml_crc_2:
SHLCA
DEC
J
XOR
LD
tml_crc_3:
TEST
J
SHLCA
XOR
J
tml_crc_4:
SHLCA
tml_crc_5:
INC
CMP
J
INC
CMP
J
tml_crc_end:
LD
.tml_crc
HL
DE
IX,BC
DE,0xffff
IY,0x0
IX,0x0
LE,tml_crc_end
;
;
;
;
;
;
;
HL,IY
HL,WA
C,(HL)
B,0x0
HL,BC
B,0x8
;
;
;load memory data
;
;
;
HL
B
NE,tml_crc_2
DE,HL
C,0x0
; 8bit shift
;
;
;
;
D.7
T,tml_crc_4
DE
DE,0x1021
tml_crc_5
;
;
;
;Polynomial:0x1021 (x^16 + x^12 + x^5 + 1)
;
DE
;
C
C,0x8
LT,tml_crc_3
IY
IY,IX
LT,tml_crc_1
;
;
;
; decrement length
; finish?
;
else JP
WA,DE
; WA:return data
19
Stack on HL
Stack on DE
IX:length
1st data
check length
自己診断テスト用サンプルソフトウェア説明書
53
POP
DE
; Restore DE
54
POP
HL
; Restore HL
55
RET
*)初期値、生成多項式を変更したい場合は、19 目、40 行目の値を変更してください。
1
2
3
4
5
6
7
使用例
;********************************************************************
;* Example : .tml_crc
;********************************************************************
; 0x100∼0x110
LD
WA,0x0100
LD
BC,0x0010
CALL
.tml_crc
20
自己診断テスト用サンプルソフトウェア説明書
3.5
CRC計算(2)
3.4で紹介したサンプルプログラムを参照テーブルを用いることで、処理の高速化を図っ
たプログラムです。
= C 言語 =
tml_crc_fast
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
function call
unsigned int tml_crc_fast(const unsigned char *adr ,unsigned int byte)
parameter 1
const unsigned char *adr
開始アドレス
parameter 2
unsigned int byte
バイト数(1∼65535)
return value
unsigned int
計算結果
/*****************************************************************/
/* CRC-CCITT TABLE
*/
/*****************************************************************/
const unsigned int crc_table[256] = {
0x0000,0x1021,0x2042,0x3063,0x4084,0x50A5,0x60C6,0x70E7,
0x8108,0x9129,0xA14A,0xB16B,0xC18C,0xD1AD,0xE1CE,0xF1EF,
0X1231,0x0210,0x3273,0x2252,0x52B5,0x4294,0x72F7,0x62D6,
0x9339,0x8318,0xB37B,0xA35A,0xD3BD,0xC39C,0xF3FF,0xE3DE,
0x2462,0x3443,0x0420,0x1401,0x64E6,0x74C7,0x44A4,0x5485,
0xA56A,0xB54B,0x8528,0x9509,0xE5EE,0xF5CF,0xC5AC,0xD58D,
0x3653,0x2672,0x1611,0x0630,0x76D7,0x66F6,0x5695,0x46B4,
0xB75B,0xA77A,0x9719,0x8738,0xF7DF,0xE7FE,0xD79D,0xC7BC,
0x48C4,0x58E5,0x6886,0x78A7,0x0840,0x1861,0x2802,0x3823,
0xC9CC,0xD9ED,0xE98E,0xF9AF,0x8948,0x9969,0xA90A,0xB92B,
0x5AF5,0x4AD4,0x7AB7,0x6A96,0x1A71,0x0A50,0x3A33,0x2A12,
0xDBFD,0xCBDC,0xFBBF,0xEB9E,0x9B79,0x8B58,0xBB3B,0xAB1A,
0x6CA6,0x7C87,0x4CE4,0x5CC5,0x2C22,0x3C03,0x0C60,0x1C41,
0xEDAE,0xFD8F,0xCDEC,0xDDCD,0xAD2A,0xBD0B,0x8D68,0x9D49,
0x7E97,0x6EB6,0x5ED5,0x4EF4,0x3E13,0x2E32,0x1E51,0x0E70,
0xFF9F,0xEFBE,0xDFDD,0xCFFC,0xBF1B,0xAF3A,0x9F59,0x8F78,
0x9188,0x81A9,0xB1CA,0xA1EB,0xD10C,0xC12D,0xF14E,0xE16F,
0x1080,0x00A1,0x30C2,0x20E3,0x5004,0x4025,0x7046,0x6067,
0x83B9,0x9398,0xA3FB,0xB3DA,0xC33D,0xD31C,0xE37F,0xF35E,
0x02B1,0x1290,0x22F3,0x32D2,0x4235,0x5214,0x6277,0x7256,
0xB5EA,0xA5CB,0x95A8,0x8589,0xF56E,0xE54F,0xD52C,0xC50D,
0x34E2,0x24C3,0x14A0,0x0481,0x7466,0x6447,0x5424,0x4405,
0xA7DB,0xB7FA,0x8799,0x97B8,0xE75F,0xF77E,0xC71D,0xD73C,
0x26D3,0x36F2,0x0691,0x16B0,0x6657,0x7676,0x4615,0x5634,
0xD94C,0xC96D,0xF90E,0xE92F,0x99C8,0x89E9,0xB98A,0xA9AB,
0x5844,0x4865,0x7806,0x6827,0x18C0,0x08E1,0x3882,0x28A3,
0xCB7D,0xDB5C,0xEB3F,0xFB1E,0x8BF9,0x9BD8,0xABBB,0xBB9A,
0x4A75,0x5A54,0x6A37,0x7A16,0x0AF1,0x1AD0,0x2AB3,0x3A92,
0xFD2E,0xED0F,0xDD6C,0xCD4D,0xBDAA,0xAD8B,0x9DE8,0x8DC9,
0x7C26,0x6C07,0x5C64,0x4C45,0x3CA2,0x2C83,0x1CE0,0x0CC1,
0xEF1F,0xFF3E,0xCF5D,0xDF7C,0xAF9B,0xBFBA,0x8FD9,0x9FF8,
0x6E17,0x7E36,0x4E55,0x5E74,0x2E93,0x3EB2,0x0ED1,0x1EF0
};
/*
*********************************************************************
* NAME : tml_crc_fast
*-------------------------------------------------------------------* PARAMETER : PARAMETER 1 address pointer on first data
*
PARAMETER 2 length of the byte
*
* RETURN VALUE : CRC data
* DESCRIPTION : The CRC-CCITT computation(high-speed version)
21
自己診断テスト用サンプルソフトウェア説明書
49 *
50 *********************************************************************
51 */
52 unsigned int tml_crc_fast(const unsigned char *s,unsigned int byte)
53 {
54
unsigned int crc=0xffff;
/* first value */
55
while(byte-- > 0){
56
crc = crc_table[((crc>>8) ^ *s++) & 0xff] ^ (crc<<8);
57
}
58
return crc;
59 }
*)初期値を変更したい場合は、54 行目の値を変更してください。
1
2
3
4
5
使用例
/********************************************************************
* Example : tml_crc_fast
********************************************************************/
/* 0x100∼0x110 */
crc = tml_crc_fast((unsigned char *)0x0100, 0x0010);
22
自己診断テスト用サンプルソフトウェア説明書
= アセンブリ言語 =
.tml_crc_fast
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
parameter 1
WA register
テスト開始アドレス
parameter 2
BC register
テストバイト数(1∼65535)
return value
WA register
計算結果
used register
WA,BC,IX,IY register
code size
576 byte
stack size
4 byte
;*****************************************************************/
;* CRC-CCITT TABLE
*/
;*****************************************************************/
crc_table:
DW
0x0000,0x1021,0x2042,0x3063,0x4084,0x50A5,0x60C6,0x70E7
DW
0x8108,0x9129,0xA14A,0xB16B,0xC18C,0xD1AD,0xE1CE,0xF1EF
DW
0x1231,0x0210,0x3273,0x2252,0x52B5,0x4294,0x72F7,0x62D6
DW
0x9339,0x8318,0xB37B,0xA35A,0xD3BD,0xC39C,0xF3FF,0xE3DE
DW
0x2462,0x3443,0x0420,0x1401,0x64E6,0x74C7,0x44A4,0x5485
DW
0xA56A,0xB54B,0x8528,0x9509,0xE5EE,0xF5CF,0xC5AC,0xD58D
DW
0x3653,0x2672,0x1611,0x0630,0x76D7,0x66F6,0x5695,0x46B4
DW
0xB75B,0xA77A,0x9719,0x8738,0xF7DF,0xE7FE,0xD79D,0xC7BC
DW
0x48C4,0x58E5,0x6886,0x78A7,0x0840,0x1861,0x2802,0x3823
DW
0xC9CC,0xD9ED,0xE98E,0xF9AF,0x8948,0x9969,0xA90A,0xB92B
DW
0x5AF5,0x4AD4,0x7AB7,0x6A96,0x1A71,0x0A50,0x3A33,0x2A12
DW
0xDBFD,0xCBDC,0xFBBF,0xEB9E,0x9B79,0x8B58,0xBB3B,0xAB1A
DW
0x6CA6,0x7C87,0x4CE4,0x5CC5,0x2C22,0x3C03,0x0C60,0x1C41
DW
0xEDAE,0xFD8F,0xCDEC,0xDDCD,0xAD2A,0xBD0B,0x8D68,0x9D49
DW
0x7E97,0x6EB6,0x5ED5,0x4EF4,0x3E13,0x2E32,0x1E51,0x0E70
DW
0xFF9F,0xEFBE,0xDFDD,0xCFFC,0xBF1B,0xAF3A,0x9F59,0x8F78
DW
0x9188,0x81A9,0xB1CA,0xA1EB,0xD10C,0xC12D,0xF14E,0xE16F
DW
0x1080,0x00A1,0x30C2,0x20E3,0x5004,0x4025,0x7046,0x6067
DW
0x83B9,0x9398,0xA3FB,0xB3DA,0xC33D,0xD31C,0xE37F,0xF35E
DW
0x02B1,0x1290,0x22F3,0x32D2,0x4235,0x5214,0x6277,0x7256
DW
0xB5EA,0xA5CB,0x95A8,0x8589,0xF56E,0xE54F,0xD52C,0xC50D
DW
0x34E2,0x24C3,0x14A0,0x0481,0x7466,0x6447,0x5424,0x4405
DW
0xA7DB,0xB7FA,0x8799,0x97B8,0xE75F,0xF77E,0xC71D,0xD73C
DW
0x26D3,0x36F2,0x0691,0x16B0,0x6657,0x7676,0x4615,0x5634
DW
0xD94C,0xC96D,0xF90E,0xE92F,0x99C8,0x89E9,0xB98A,0xA9AB
DW
0x5844,0x4865,0x7806,0x6827,0x18C0,0x08E1,0x3882,0x28A3
DW
0xCB7D,0xDB5C,0xEB3F,0xFB1E,0x8BF9,0x9BD8,0xABBB,0xBB9A
DW
0x4A75,0x5A54,0x6A37,0x7A16,0x0AF1,0x1AD0,0x2AB3,0x3A92
DW
0xFD2E,0xED0F,0xDD6C,0xCD4D,0xBDAA,0xAD8B,0x9DE8,0x8DC9
DW
0x7C26,0x6C07,0x5C64,0x4C45,0x3CA2,0x2C83,0x1CE0,0x0CC1
DW
0xEF1F,0xFF3E,0xCF5D,0xDF7C,0xAF9B,0xBFBA,0x8FD9,0x9FF8
DW
0x6E17,0x7E36,0x4E55,0x5E74,0x2E93,0x3EB2,0x0ED1,0x1EF0
;*********************************************************************
;* NAME : tml_crc_fast
;*-------------------------------------------------------------------;* PARAMETER : WAreg. address pointer on first data
;*
BCreg. length of the byte
;* RETURN VALUE : Areg. CRC data
;*
;* USE REGISTER : WA,BC,IX,IY
;* DESCRIPTION : The CRC-CCITT computation((high-speed version))
;*
;*********************************************************************
PUBLIC .tml_crc_fast
.tml_crc_fast:
23
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
1
2
3
4
5
6
7
自己診断テスト用サンプルソフトウェア説明書
Stack on HL
Stack on DE
IXreg. = Address
first data
if length=0
then JP
length decrement
PUSH
PUSH
LD
LD
CMP
J
DEC
LD
tml_crc_f1:
LD
LD
INC
LD
LD
tml_crc_f2:
SHRC
RORC
DEC
J
XOR
AND
SHLCA
ADD
HL
DE
IX,WA
WA,0xffff
BC,0x0
T,tml_crc_f4
BC
IY,BC
;
;
;
;
;
;
;
;
E,(IX)
D,0
IX
HL,WA
B,8
; Address increment.
; HLreg = CRC
; shift 8 times.
H
L
B
ne,tml_crc_f2
HL,DE
HL,0x00FF
HL
HL,crc_table
; right shift
;
; shift end ?
;
else JP
LD
tml_crc_f3:
SHLCA
DEC
J
B,0x8
; shift 8 times.
WA
B
ne,tml_crc_f3
; reft shift
; shift end ?
;
else JP
WA,(HL)
; WAreg = CRC
IY,0
T,tml_crc_f4
IY
tml_crc_f1
; finish ?
;
then JP
; length decrement
;
DE
HL
; Restore DE
; Restore HL
XOR
CMP
J
DEC
J
tml_crc_f4:
POP
POP
RET
; Table data size adj.
使用例
;********************************************************************
;* Example : .tml_crc_fast
;********************************************************************
; 0x100∼0x110
LD
WA,0x0100
LD
BC,0x0010
CALL
.tml_crc_fast
24
自己診断テスト用サンプルソフトウェア説明書
4.概略フローチャート
tml_ram_test_cb
tml_ram_test_cb
data back-up
0x55/0xAA write
error
set error info.
verify 0x55/0xAA
OK
0xAA/0x55 write
error
set error info.
verify 0xAA/0x55
OK
restore data
yes
all ram test end
no
address + 2
return
RAM 0x55/0xAA RW test
25
自己診断テスト用サンプルソフトウェア説明書
tml_ram_test_marchc
tml_ram_test_marchc
clear check ram
area
check write “1” into
bit, from lower
address
check write “0” into
bit, from lower
address
check write “1” into
bit, from upper
address
check write “0” into
bit, from upper
address
check area is the
confirmation of ALL"0"
test result set
return
RAM March-C test
26
自己診断テスト用サンプルソフトウェア説明書
tml_chksum
tml_chksum
chksum data clear
add chksum
yes
all bytes add.
no
next address set
return
Checksum Calc.
27
自己診断テスト用サンプルソフトウェア説明書
5.補足
5.1
数値表現
本文中の数値表現は以下のように、Unix表記で記してあります。
・2進数の場合、数値の前に0yまたは0Yで始まる0または1の数字列で表します。
・16進数の場合、数値の前に0xまたは0Xで始まる0∼9,A∼F,a∼fの英数字列で表します。
・10進数の場合、0,0x,0X,0y,0Y以外で始まる0∼9の数字列で表します。
5.2
CRC
用語
:「巡回冗長検査」(Cyclic Redundancy Check)の略。連続して出現する誤り(バースト誤り)
の検出が可能な誤り検出方式。CRC(8)、CRC(16)、CRC(32)などの方式
がある。本文中のサンプルプログラムはCRC−CCITTに沿ったものである。
チェックサム :データを送受信する際の誤り検出方法の一つ。送信前にデータを分割し、それぞれのブロッ
ク内のデータを数値とみなして合計を取ったもの。メモリのデータ整合性確認にも用いられ
る。
28