2011/6/25
チェックサムの計算 ただいま挑戦中
PICマイコンのチェックサムの計算方法について
Hexファイル中の各行末のチェックサムではなくて、PICマイコンのメモリ内容のチェックサムの計算についてです。
PIC18F4450を例にすると、
チェックサムは次のようにして計算することができます。
1、プログラムメモリのすべてのロケーションの内容(バイト値)を合計する
2、コンフィギュレーション・ワードの内容(未実装ビットは除外、バイト値)を合計する
3、プログラムメモリのブロックのうち、いずれか1つでもコードプロテクトされていた場合は、各ユーザーIDロケーションの内容(下位4ビット)を合計する
上記の合計値を加算した、下位16ビットがチェックサムになります。
プログラムメモリがコードプロテクトされていない場合のプログラムメモリのチェックサムの計算方法は、
Dim i As Integer
Dim Checksum As Integer = 0
For i = 0 To ProgramMemorySize -1
Checksum = Checksum + Code(i)
If Checksum > &HFFFF Then
Checksum = Checksum - &H10000
EndIf
Next
プログラムメモリがコードプロテクトされていた場合、コードプロテクトされたデバイスから読み出したコードは‘00h’となるので、上記の方法で計算できますが、デバイスに書き込む前のコードは‘00h’であるとは限りませんので、上記の方法では計算できません。
たとえば、00000h〜003FF のブートブロックをコードプロテクトした場合、00400以降のブロックのチェックサムを計算しなければなりません。つまり、ブートブロックをチェックサムの計算対象から除外する必要があります。
同様に、ブロック0がコードプロテクトされていた場合はブロック0を、ブロック5がコードプロテクトされていた場合はブロック5をそれぞれ計算対象から除外します。
さらに、ブートブロックのサイズが可変なデバイスもあります。
PIC18F4550の場合は2Kバイトで固定ですが、PIC18F4682は、2Kバイト、4Kバイト、8Kバイトの3つから選択可能です。
したがって、ブートブロックサイズの可変なデバイスの場合は、あらかじめ、コンフィギュレーション・ワードのBBSIZビットの値から、ブートブロックのサイズを求めておく必要があります。
こうして、プログラムメモリにランダムな値を設定し、ブートブロックとブロック0をコードプロテクトした場合のチェックサムを計算してみると、‘BBF3h’になりました。
このコードを MPLAB-IDE に読み込ませると、‘0xbbf3’となりました。
ついでに、PICkit2のPC側ソフト(V2.61)に読み込ませてみると、‘0B0Fh’でした。
PICkit2のコードプロテクト時のチェックサムが怪しい結果になりました。
また、MPLAB-IDE も常に正しいかというと、そうでもなさそうです。
前述のPIC18F4682のブロック0をコードプロテクトしてみると…。自分で計算したチェックサムと果たして一致するでしょうか。
何事も疑う価値はあります。
1
Hexファイル中の各行末のチェックサムではなくて、PICマイコンのメモリ内容のチェックサムの計算についてです。
PIC18F4450を例にすると、
チェックサムは次のようにして計算することができます。
1、プログラムメモリのすべてのロケーションの内容(バイト値)を合計する
2、コンフィギュレーション・ワードの内容(未実装ビットは除外、バイト値)を合計する
3、プログラムメモリのブロックのうち、いずれか1つでもコードプロテクトされていた場合は、各ユーザーIDロケーションの内容(下位4ビット)を合計する
上記の合計値を加算した、下位16ビットがチェックサムになります。
プログラムメモリがコードプロテクトされていない場合のプログラムメモリのチェックサムの計算方法は、
Dim i As Integer
Dim Checksum As Integer = 0
For i = 0 To ProgramMemorySize -1
Checksum = Checksum + Code(i)
If Checksum > &HFFFF Then
Checksum = Checksum - &H10000
EndIf
Next
プログラムメモリがコードプロテクトされていた場合、コードプロテクトされたデバイスから読み出したコードは‘00h’となるので、上記の方法で計算できますが、デバイスに書き込む前のコードは‘00h’であるとは限りませんので、上記の方法では計算できません。
たとえば、00000h〜003FF のブートブロックをコードプロテクトした場合、00400以降のブロックのチェックサムを計算しなければなりません。つまり、ブートブロックをチェックサムの計算対象から除外する必要があります。
同様に、ブロック0がコードプロテクトされていた場合はブロック0を、ブロック5がコードプロテクトされていた場合はブロック5をそれぞれ計算対象から除外します。
さらに、ブートブロックのサイズが可変なデバイスもあります。
PIC18F4550の場合は2Kバイトで固定ですが、PIC18F4682は、2Kバイト、4Kバイト、8Kバイトの3つから選択可能です。
したがって、ブートブロックサイズの可変なデバイスの場合は、あらかじめ、コンフィギュレーション・ワードのBBSIZビットの値から、ブートブロックのサイズを求めておく必要があります。
こうして、プログラムメモリにランダムな値を設定し、ブートブロックとブロック0をコードプロテクトした場合のチェックサムを計算してみると、‘BBF3h’になりました。
このコードを MPLAB-IDE に読み込ませると、‘0xbbf3’となりました。
ついでに、PICkit2のPC側ソフト(V2.61)に読み込ませてみると、‘0B0Fh’でした。
PICkit2のコードプロテクト時のチェックサムが怪しい結果になりました。
また、MPLAB-IDE も常に正しいかというと、そうでもなさそうです。
前述のPIC18F4682のブロック0をコードプロテクトしてみると…。自分で計算したチェックサムと果たして一致するでしょうか。
何事も疑う価値はあります。
1
テーマ: プログラミング
2011/6/6
飛蚊症 雑感
4月末の、日差しがきつくなってきたころ、左眼に軽い痛みを感じた。
「しまった」と思った。
次の日、左眼の視野の左隅に、蚊か小バエのようなものが見えるようになった。
いつも通院している眼科で診てもらったが、「心配ない」とのことだった。
「紫外線の影響でしょうか?」と尋ねてみたが、「紫外線は無関係」とのことだった。
5月に入って、糸くずのようなものが2つ、視野の中央部にも見えるようになった。
これが増えていくものなのか、放っておいてだいじょうぶなものか、不安になったので、再度、眼科で診てもらった。
こんどは別の医師だったが、「あなたぐらいの年齢になると、よくあることです」「心配ありません」とのことだった。
この医師にも、「紫外線の影響でしょうか?」と尋ねてみたが、「紫外線は無関係」とのことだった。
インターネットで検索してみると、紫外線の生体にたいする悪影響については、WHOが警告しているが、日本ではなぜか寛容だ(環境省は『紫外線環境保健マニュアル』で注意を喚起しているが…)。
紫外線は電離放射線と非電離放射線を区分する位置にあって、非電離放射線に区分されるが、弱い電離性をもっているともいわれている。
紫外線が生体に吸収されると、有害な活性酸素やフリーラディカルを生成する。DNAを傷つけることもある。免疫力も抑えるらしい。
皮膚のばあいは、メラニン色素が紫外線から守ってくれるが、眼のばあいは虹彩にあるだけだ。
そうすると、飛蚊症の進行を防ぐには、医者がどういおうと、紫外線を防ぐためにサングラスをできるだけ着用するようにすることと、免疫力の低下、抗酸化物質の減少に注意することだろう。
抗酸化物質のカテキンを多く含む緑茶を、毎日、1リットル以上飲むことを目標にして、3週間。
小バエのようなものはまだ消えないが、糸くずのようなものは、だいぶ薄くなってきた。
しかし、別の、新たな心配もある。
それは、お茶と放射能の問題だ。
検査拒否だけはやめてほしい。
0
「しまった」と思った。
次の日、左眼の視野の左隅に、蚊か小バエのようなものが見えるようになった。
いつも通院している眼科で診てもらったが、「心配ない」とのことだった。
「紫外線の影響でしょうか?」と尋ねてみたが、「紫外線は無関係」とのことだった。
5月に入って、糸くずのようなものが2つ、視野の中央部にも見えるようになった。
これが増えていくものなのか、放っておいてだいじょうぶなものか、不安になったので、再度、眼科で診てもらった。
こんどは別の医師だったが、「あなたぐらいの年齢になると、よくあることです」「心配ありません」とのことだった。
この医師にも、「紫外線の影響でしょうか?」と尋ねてみたが、「紫外線は無関係」とのことだった。
インターネットで検索してみると、紫外線の生体にたいする悪影響については、WHOが警告しているが、日本ではなぜか寛容だ(環境省は『紫外線環境保健マニュアル』で注意を喚起しているが…)。
紫外線は電離放射線と非電離放射線を区分する位置にあって、非電離放射線に区分されるが、弱い電離性をもっているともいわれている。
紫外線が生体に吸収されると、有害な活性酸素やフリーラディカルを生成する。DNAを傷つけることもある。免疫力も抑えるらしい。
皮膚のばあいは、メラニン色素が紫外線から守ってくれるが、眼のばあいは虹彩にあるだけだ。
そうすると、飛蚊症の進行を防ぐには、医者がどういおうと、紫外線を防ぐためにサングラスをできるだけ着用するようにすることと、免疫力の低下、抗酸化物質の減少に注意することだろう。
抗酸化物質のカテキンを多く含む緑茶を、毎日、1リットル以上飲むことを目標にして、3週間。
小バエのようなものはまだ消えないが、糸くずのようなものは、だいぶ薄くなってきた。
しかし、別の、新たな心配もある。
それは、お茶と放射能の問題だ。
検査拒否だけはやめてほしい。
0
テーマ: 視力回復
2011/4/21
ホームページサービスの終了 ただいま挑戦中
2003年から使用してきた、有料のホームページサービスが、5月21日をもって終了します。
終了予定は来年5月21日でした。来年3月15日の契約期間までは使用できます(5月22日訂正)。
ホームページのデータの引越し先を早急にさがす必要があります。
有為転変は世の習い、とは昔からいわれますが、どこかむなしさを感じます。
5月22日追加
移転先への移転は完了しました。
メールの終了予定日を見誤ったのは、……さっそく、眼科を受診しました。
左眼に飛蚊症がでていました。
治療方法がないので、我慢するよりしかたがありません。
視界の端に蚊や小バエのようなものと、視界の中央に糸くずのようなものが浮遊するので、
うっとうしくて、たまりません。
0
終了予定は来年5月21日でした。来年3月15日の契約期間までは使用できます(5月22日訂正)。
ホームページのデータの引越し先を早急にさがす必要があります。
有為転変は世の習い、とは昔からいわれますが、どこかむなしさを感じます。
5月22日追加
移転先への移転は完了しました。
メールの終了予定日を見誤ったのは、……さっそく、眼科を受診しました。
左眼に飛蚊症がでていました。
治療方法がないので、我慢するよりしかたがありません。
視界の端に蚊や小バエのようなものと、視界の中央に糸くずのようなものが浮遊するので、
うっとうしくて、たまりません。
0
テーマ: プログラミング
2011/4/18
BANKSEL ただいま挑戦中
従来のPIC16F系列
anta res 1
gata res 1
doko res 1
bcf STATUS,RP0
bsf STATUS,RP1
movlw B'00110000'
movwf OPTION_REG
bcf STATUS,RP1
movlw H'80'
movwf anta
拡張PIC16F系列
huyu res 1
haru res 1
natu res 1
bcf STATUS,RP0 ; STATUSレジスタにRP0やRP1はなくなった
bsf STATUS,RP1 ;
movlb OPTION_REG >> 7 ; 代わりにBSR(Bank Select Register)を使う
movlw B'00110000'
movwf OPTION_REG
movlb 0x00
movlw 0x80
movwf huyu
BANKSELマクロはどちらにも対応しているので、これを使ったほうが便利
cblock 0x20
tako
ika
yaki:2
endc
BANKSEL OPTION_REG
movlw B'00110000'
movwf OPTION_REG
BANKSEL tako
movlw 0x80
movwf tako
0
テーマ: プログラミング
2011/4/15
1秒のウェイト ただいま挑戦中
PIC16F1827 を32MHzの内蔵クロックで動かしたときの、1秒間の待ち時間。
movlw .10
call Wait
Wait
movwf Second
incf Second
Loop
decf Second
btfss STATUS,Z
goto Wait100ms
return
Wait100ms
movlw .28
movwf Tmp1
movlw .54
movwf Tmp2
movlw .131
movwf Tmp3
WaitLoop
movf Tmp1,W
movwf Cnt1
Loop1
movf Tmp2,W
movwf Cnt2
Loop2
movf Tmp3,W
movwf Cnt3
Loop3
decf Cnt3
btfss STATUS,Z
goto Loop3
decf Cnt2
btfss STATUS,Z
goto Loop2
decf Cnt1
btfss STATUS,Z
goto Loop1
goto Loop
実行結果は、1.000002秒
0
movlw .10
call Wait
Wait
movwf Second
incf Second
Loop
decf Second
btfss STATUS,Z
goto Wait100ms
return
Wait100ms
movlw .28
movwf Tmp1
movlw .54
movwf Tmp2
movlw .131
movwf Tmp3
WaitLoop
movf Tmp1,W
movwf Cnt1
Loop1
movf Tmp2,W
movwf Cnt2
Loop2
movf Tmp3,W
movwf Cnt3
Loop3
decf Cnt3
btfss STATUS,Z
goto Loop3
decf Cnt2
btfss STATUS,Z
goto Loop2
decf Cnt1
btfss STATUS,Z
goto Loop1
goto Loop
実行結果は、1.000002秒
0
テーマ: プログラミング
2011/4/14
ツバキ 雑感
2011/4/8
(無題) 雑感
国民年金保険料の納付書が送られてきた。しまった。仕事を休んでいるのを忘れていた。今年は一括前納するのは無理みたい…。まあ、なんとかなるか。
東日本大震災の義援金。町内会で日にちを指定して日赤の募金をするという案内があったが、待っていてもこなかった。町内会と日赤奉仕団、氏子、檀家、あるいは政党のそれぞれの役員が入り組んで渾然一体となっているので、何がどうなっているのか、よくわからない。けっきょく自分で、郵便局から日赤やユニセフへ送金した。
日本国内向けにユニセフが募金を集めるのは伊勢湾台風以来約50年ぶりという。伊勢湾台風といえば、母屋の屋根瓦が全部吹き飛ばされ、床下浸水した。当時は屋根の修理をしようにも瓦屋の在庫がなくなり、それからトタン屋根のままだ。
で、ダイレクトメールのような領収書も郵便受けに入っていた。
郵便局での送金時の受領書が領収書になるのだから、あえて領収書に不必要なお金をかける必要はないと思うのだが…。所得税の控除のために別途必要な人もいるのかもしれない。
とにかく、義援金は1円でも無駄にせず、被災者のために有効につかってほしいものだ。

0
東日本大震災の義援金。町内会で日にちを指定して日赤の募金をするという案内があったが、待っていてもこなかった。町内会と日赤奉仕団、氏子、檀家、あるいは政党のそれぞれの役員が入り組んで渾然一体となっているので、何がどうなっているのか、よくわからない。けっきょく自分で、郵便局から日赤やユニセフへ送金した。
日本国内向けにユニセフが募金を集めるのは伊勢湾台風以来約50年ぶりという。伊勢湾台風といえば、母屋の屋根瓦が全部吹き飛ばされ、床下浸水した。当時は屋根の修理をしようにも瓦屋の在庫がなくなり、それからトタン屋根のままだ。
で、ダイレクトメールのような領収書も郵便受けに入っていた。
郵便局での送金時の受領書が領収書になるのだから、あえて領収書に不必要なお金をかける必要はないと思うのだが…。所得税の控除のために別途必要な人もいるのかもしれない。
とにかく、義援金は1円でも無駄にせず、被災者のために有効につかってほしいものだ。

0
テーマ: 東日本大震災
2011/4/5
TA7291SGのテスト ただいま挑戦中
ロボットカーのモータードライバにTB6552SNを使用することを前提にして作業をすすめてきたが、このIC1個のはんだ付けだけで授業時間が食われそうなので、SIPパッケージのTA7291SGを使用することにした。
ただ、DCモータ1個を駆動するのにこのドライバが1個必要になる。
TA7291SGの出力の最大定格は電流は1.2Aだが、マブチのFA−130モータのストール時の電流は2.1Aなので、ストールさせないようにしなければならない。
TA7291は、制御電源Vrefの電圧でモーター用の出力電圧を調節可能(ただし、Vres≦VS)となっているので試してみた。
PIC16F1827でPWM電圧制御してみた。しかしこのモータは、3Vが最適な駆動電圧なので、モータ用の出力電圧を低くすると、回転はするものの、トルクは極端に低下してしまう。センサの状態を判断して正転・逆転や停止を高速に切り替えると、まったく追従できず、ぶーんといううなり声をあげるだけだ。
回転速度を変化させる必要があるなら、入力端子IN1、IN2を使用したほうがよいかもしれない。
ロボットカーでは回転速度を変化させる予定はないので、最終的にVres=VS、つまり定格の3Vで駆動することにした。

0
ただ、DCモータ1個を駆動するのにこのドライバが1個必要になる。
TA7291SGの出力の最大定格は電流は1.2Aだが、マブチのFA−130モータのストール時の電流は2.1Aなので、ストールさせないようにしなければならない。
TA7291は、制御電源Vrefの電圧でモーター用の出力電圧を調節可能(ただし、Vres≦VS)となっているので試してみた。
PIC16F1827でPWM電圧制御してみた。しかしこのモータは、3Vが最適な駆動電圧なので、モータ用の出力電圧を低くすると、回転はするものの、トルクは極端に低下してしまう。センサの状態を判断して正転・逆転や停止を高速に切り替えると、まったく追従できず、ぶーんといううなり声をあげるだけだ。
回転速度を変化させる必要があるなら、入力端子IN1、IN2を使用したほうがよいかもしれない。
ロボットカーでは回転速度を変化させる予定はないので、最終的にVres=VS、つまり定格の3Vで駆動することにした。

0
テーマ: プログラミング


