ロックビットのあるフラッシュメモリの対応例
CSIDEが32ビット・デバイスに対応しているかどうかにより対処方法が異なります。
下記でお手持ちのCSIDEが32ビット・デバイスに対応しているかご確認ください。
●32ビット・デバイス対応CSIDEの場合
32ビットデバイスに対応しているCSIDEでは、セクタ・ブロックのアクセスごとにロック・ビットを
解除することができます。
ロック・ビットを解除する手順が
(1)セクタ・ブロックに0x0060をライト
(2)セクタ・ブロックに0x00d0をライト の場合の例 |
- ロックビットを解除するマクロ・コマンドを登録
{lockbit_clear
int __addr
__addr = GetFlashSectBlockAddress()
Outport(2, __addr, 0x0060)
Outport(2, __addr, 0x00d0)
while{ (Inport(2, __addr) & 0x0080) == 0x0000
}
Outport(2, __addr, 0x00ff)
} |
- コマンド・ウィンドウでFlashBeforExecMacro(lockbit_clear)を実行
|
●32ビット・デバイス未対応CSIDEの場合
32ビット未対応のCSIDEでは、フラッシュメモリに書き込み等を行う前に、全てのロック・ビットを
解除しておく必要があります。
|
インテル製28F128J3を16bitで1個使用している場合の例 |
- ロックビットを解除するマクロ・コマンドを登録
{ClearLockBit16
Printf("Block=%%3d Address=%%08lx .", %0, %1)
Outport(2, %1, 0x0060)
Outport(2, %1, 0x00d0)
while{ (Inport(2, %1) & 0x0080) == 0x0000
}
Printf(".")
while{ 1
if{ (Inport(2, %1) & 0x0008) ==
0x0008
Printf("
Error : Voltage Range Error\n")
break
}
Printf(".")
if{ (Inport(2, %1) & 0x0030) ==
0x0030
Printf("
Error : Command Sequence Error\n")
break
}
Printf(".")
if{ (Inport(2, %1) & 0x0020) ==
0x0020
Printf("
Error : Clear Block Lock-Bits Error\n")
break
}
Printf(" Ok\n")
break
}
Outport(2, %1, 0x00ff)
}
{i_28F128J3_16
int i
Printf("\nClear Block Lock-Bits\n")
for {i=0, i<0i128, i+=1
ClearLockBit16 i, %0+i*0x20000
}
Printf("Finish\n")
} |
- コマンド・ウィンドウでi_28F128J3_16 0を実行
(フラッシュ・デバイスが0番地に配置されている場合)
|
|