(57)【特許請求の範囲】
【請求項１】
演算処理部と、この演算処理部から送られてくるデータが書き込まれるレジスタとを備え、前記レジスタに書き込まれているデータの異常を検出するレジスタ異常検出装置において、
前記演算処理部から送られてきたデータを前記レジスタに書き込むデータ書込部と、
前記レジスタに書き込まれているデータの異常を検出するための検査用の指標の期待値を算出する期待値算出部と、
前記レジスタに書き込まれているデータの前記検査用の指標の期待値に対応する現状値の算出を繰り返す現状値算出部と、
前記現状値算出部によって前記検査用の指標の現状値が算出される毎に、算出された検査用の指標の現状値を更新記憶する現状値記憶部と、
前記現状値算出部によって前記検査用の指標の現状値が算出される毎に、算出された検査用の指標の現状値と前記期待値との一致／不一致を判定し、その判定結果を第１の判定結果としてエラー検出レジスタに書き込む一致／不一致判定部とを備え、
前記演算処理部は、
前記エラー検出レジスタに書き込まれている第１の判定結果および前記現状値記憶部に記憶されている検査用の指標の現状値を読み出し、
前記現状値記憶部から前記現状値を読み出す毎に、その読み出した現状値と前記演算処理部で保存される期待値との一致／不一致を判定し、その判定結果を第２の判定結果とし、
前記演算処理部は、前記第１の判定結果が「一致」かつ前記第２の判定結果が「一致」である場合以外の場合に前記レジスタに書き込まれているデータの異常を検出する
ことを特徴とするレジスタ異常検出装置。
【請求項２】
請求項１に記載されたレジスタ異常検出装置において、
前記エラー検出レジスタに書き込まれている第１の判定結果は、
通信プロトコルに含めて前記演算処理部に送られてくる
ことを特徴とするレジスタ異常検出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、レジスタに書き込まれているデータの異常を検出するレジスタ異常検出装置に関する。
【背景技術】
【０００２】
従来より、マイクロコンピュータを用いて各種の処理を行う電子回路では、演算処理部（ＣＰＵ（Central Processing Unit））から送られてくるデータをＩＣ（Integrated Circuit）内部のレジスタに書き込んでいる。このマイクロコンピュータを用いた電子回路において、ＩＣ内部のレジスタに書き込まれたデータ（レジスタ値）は、ノイズなどの要因で意図せずに書き変わってしまうことがある。
【０００３】
このため、従来においては、下記の（１），（２）のような処理をＣＰＵ側で行わせるようにしていた。
(１)動作中にレジスタ値を常時ポーリングすることにより、レジスタ値が変化していないかどうかを監視し、レジスタへの書き込みを行っていないにも関わらずレジスタ値が変化していた場合は、レジスタ値（レジスタに書き込まれているデータ）に異常が生じていると判断し、正しい値を書き込む。
(２)レジスタ初期設定後、初期設定時と同じ値を一定間隔で書き続ける。これにより、レジスタ値がノイズなどの影響で変化したとしても、レジスタ値が正しい値で上書きされる。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】「20μsセトリング、250kSPSの24ビットΣ-Δ ADC - Analog Devices」、〔平成２８年４月５日検索〕、インターネット＜URL：http://www.analog.com/media/jp/technical-documentation/data-sheets/AD7176-2_jp.pdf#search='20+%CE%BCs%E3%82%BB%E3%83%88%E3%83%AA%E3%83%B3%E3%82%B0%E3%80%81250+kSPS%E3%81%AE'＞
【非特許文献２】「8-Channel, Low Noise, Low Power, 24-Bit, Sigma-Delta ADC with PGA and Reference」、〔平成２８年４月５日検索〕、インターネット＜URL：http://www.analog.com/media/en/technical-documentation/data-sheets/AD7124-8.pdf#search='8Channel%2C+Low+Noise%2C+Low+Power%2C+24Bit%2C'＞
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記の（１），（２）のような処理をＣＰＵ側で行わせるためには、処理能力の高いＣＰＵを選定する必要がある。また、レジスタに書き込まれているデータの異常（レジスタ異常）を確認するためにＣＰＵからＩＣへのアクセスが増加することで、消費電力も増大してしまう。
【０００６】
なお、ＣＰＵ側ではなくＩＣ側に、下記の（３），（４）のような仕組みを内蔵させた例もある（例えば、非特許文献１，２参照）。
【０００７】
（３）２つのレジスタを用意し、片方のレジスタを動作設定用レジスタ、もう一方のレジスタを期待値格納用レジスタとする。ＣＰＵから動作設定用レジスタに対して書き込みを行うと同じ値が期待値格納用レジスタにもコピーされる。ＣＰＵから動作設定用レジスタへの書き込みが発生していないにも関わらず、動作設定用レジスタに書き込まれている値と期待値格納用レジスタに書き込まれている値とが異なった場合に、エラー検出レジスタを用いてＣＰＵに対してレジスタ異常を通知する。
【０００８】
（４）レジスタに書き込まれているデータのＣＲＣ（Cyclic Redundancy Code）値を繰り返し算出し、ＣＰＵからレジスタへの書き込みをしていないにも関わらず、算出されたＣＲＣ値（ＣＲＣ現状値）が期待値（ＣＲＣ期待値）と不一致となった場合に、エラー検出レジスタを用いてＣＰＵに対してレジスタ異常を通知する。なお、ＣＲＣ値とは、レジスタに書き込まれているデータの異常を検出するための検査用の指標の一つであり、データを値とみなしてある定数で割った余り（余剰）として定義される値である。また、ＣＲＣ期待値とは、レジスタに書き込んだデータの本来あるべき値として定義されるＣＲＣ値である。
【０００９】
しかしながら、上記の（３）の仕組みでは、通常の２倍のレジスタを使用するため面積的に不利となる。また、上記の(４)の仕組みでは、異常検出に必要なレジスタの数を減らすことはできるが、エラー検出レジスタ自体にビットが化けるなどの異常が発生してしまった場合、誤った検出を行ってしまう可能性がある。すなわち、エラー検出レジスタ自体の異常発生により、正常であるにも関わらず異常であると判断されてしまうことがある。逆に、異常であるにも関わらず正常であると判断されてしまうことがある。
【００１０】
本発明は、このような課題を解決するためになされたもので、その目的とするところは、処理能力の高いＣＰＵを用いることなく、異常検出の信頼性を高めることが可能なレジスタ異常検出装置を提供することにある。
【課題を解決するための手段】
【００１１】
このような目的を達成するために本発明は、演算処理部（１）と、この演算処理部（１）から送られてくるデータが書き込まれるレジスタ（２Ａ）とを備え、レジスタ（２Ａ）に書き込まれているデータの異常を検出するレジスタ異常検出装置（１００）において、演算処理部（１）から送られてきたデータをレジスタ（２Ａ）に書き込むデータ書込部（２Ｂ）と、レジスタ（２Ａ）に書き込まれているデータの異常を検出するための検査用の指標の期待値を算出する期待値算出部（２Ｃ）と、レジスタ（２Ａ）に書き込まれているデータの検査用の指標の期待値に対応する現状値の算出を繰り返す現状値算出部（２Ｄ）と、現状値算出部（２Ｄ）によって検査用の指標の現状値が算出される毎に、算出された検査用の指標の現状値を更新記憶する現状値記憶部（２Ｅ）と、現状値算出部（２Ｄ）によって検査用の指標の現状値が算出される毎に、算出された検査用の指標の現状値と期待値との一致／不一致を判定し、その判定結果を第１の判定結果としてエラー検出レジスタ（２Ｈ）に書き込む一致／不一致判定部（２Ｇ）とを備え、演算処理部（１）は、エラー検出レジスタ（２Ｈ）に書き込まれている第１の判定結果および現状値記憶部（２Ｅ）に記憶されている検査用の指標の現状値を読み出し、現状値記憶部（２Ｅ）から現状値を読み出す毎に、その読み出した現状値と演算処理部（１）で保存される期待値との一致／不一致を判定し、その判定結果を第２の判定結果とし、演算処理部（１）は、第１の判定結果が「一致」かつ第２の判定結果が「一致」である場合以外の場合にレジスタ（２Ａ）に書き込まれているデータの異常を検出することを特徴とする。
【００１２】
本発明において、演算処理部（１）から送られてきたデータがレジスタ（２Ａ）に書き込まれると、このレジスタ（２Ａ）に書き込まれているデータの異常を検出するための検査用の指標の期待値（ＣＲＣ期待値）が算出される。そして、この検査用の指標の期待値の算出後、レジスタ（２Ａ）に書き込まれているデータの検査用の指標の期待値に対応する現状値（ＣＲＣ現状値）の算出が繰り返され、この算出された検査用の指標の現状値が現状値記憶部（２Ｅ）に更新記憶（上書き）される。また、検査用の指標の現状値の算出が繰り返される毎に、算出された検査用の指標の現状値と期待値との一致／不一致が判定され、その判定結果が第１の判定結果としてエラー検出レジスタ（２Ｈ）に書き込まれる。
【００１３】
演算処理部（１）は、エラー検出レジスタ（２Ｈ）に書き込まれている第１の判定結果および現状値記憶部（２Ｅ）に記憶されている検査用の指標の現状値から得られる第２の判定結果に基づいて、レジスタ（２Ａ）に書き込まれているデータの異常を検出する。例えば、第１の判定結果が「一致」でかつ第２の判定結果も「一致」であった場合にレジスタ（２Ａ）に書き込まれているデータが正常であると判断し、その他の場合は異常であると判断する。
【００１４】
本発明において、演算処理部（１）は、エラー検出レジスタ（２Ｈ）に書き込まれている第１の判定結果および現状値記憶部（２Ｅ）に記憶されている検査用の指標の現状値の少なくとも一方を読み出す。これにより、例えば、現状値記憶部（２Ｅ）に記憶されている検査用の指標の現状値から第２の判定結果を得るようにし、この検査用の指標の現状値から得られる第２の判定結果とエラー検出レジスタ（２Ｈ）に書き込まれている第１の判定結果とに基づいてレジスタ（２Ａ）に書き込まれているデータの異常を検出するようにすることができる。
【００１５】
この場合、現状値記憶部（２Ｅ）から読み出した検査用の指標の現状値から第２の判定結果を得るが、例えば、現状値記憶部（２Ｅ）に記憶されている検査用の指標の現状値を定期的に読み出すようにし、この現状値記憶部（２Ｅ）から読み出した最初の検査用の指標の現状値を演算処理部（１）側での期待値とし、以降、現状値記憶部（２Ｅ）から検査用の指標の現状値を読み出す毎に、その読み出した検査用の指標の現状値と演算処理部（１）側での期待値との一致／不一致を判定し、その判定結果を第２の判定結果とする。
【００１６】
また、この場合、第１の判定結果と第２の判定結果とに基づいてレジスタ（２Ａ）に書き込まれているデータの異常を検出するが、第１の判定結果のみでレジスタ（２Ａ）に書き込まれているデータの異常を検出するようにしてもよく、第２の判定結果のみでレジスタ（２Ａ）に書き込まれているデータの異常を検出するようにしてもよい。例えば、レジスタの異常検出方式として第１，第２，第３の方式を選択可能とし、第１の方式が選択されている場合には第１の判定結果のみで異常を検出するようにし、第２の方式が選択されている場合には第２の判定結果のみで異常を検出するようにし、第３の方式が選択されている場合には第１の判定結果と第２の判定結果とに基づいて異常を検出するようにする。
【００１７】
また、本発明において、エラー検出レジスタ（２Ｈ）に書き込まれている第１の判定結果は、演算処理部（１）が定期的に読み出すようにしてもよいし、チェックサム付きＳＰＩ（Serial Peripheral Interface）アクセスのレスポンスバイトに含めるなど、通信プロトコルに含めて演算処理部（１）に送られてくるものとしてもよい。
【００１８】
なお、上記説明では、一例として、発明の構成要素に対応する図面上の構成要素を、括弧を付した参照符号によって示している。
【発明の効果】
【００１９】
本発明によれば、エラー検出レジスタに書き込まれている第１の判定結果および現状値記憶部に記憶されている検査用の指標の現状値の少なくとも一方を読み出すようにしたので、例えば、現状値記憶部に記憶されている検査用の指標の現状値から第２の判定結果を得るようにし、この検査用の指標の現状値から得られる第２の判定結果とエラー検出レジスタに書き込まれている第１の判定結果とに基づいてレジスタに書き込まれているデータの異常を検出するなどして、処理能力の高いＣＰＵを用いることなく、異常検出の信頼性を高めることが可能となる。
【図面の簡単な説明】
【００２０】
【図１】図１は、本発明の実施の形態に係るレジスタ異常検出装置の要部の構成を示す図である。
【図２】図２は、このレジスタ異常検出装置におけるＣＲＣ値算出部の内部のステートマシン図である。
【図３】図３は、ＣＲＣ値算出部で行われる動作を示すタイミングチャートである。
【図４】図４は、ＩＣ側での処理を機能ブロック化した図である。
【図５】図５は、ＩＣ側での処理を示すフローチャートである。
【図６】図６は、ＣＰＵ側での処理を示すフローチャートである。
【図７】図７は、第１の方式が選択されている場合のＣＰＵ側で行われる処理を示すフローチャートである。
【図８】図８は、第２の方式が選択されている場合のＣＰＵ側で行われる処理を示すフローチャートである。
【図９】図９は、エラー検出レジスタの値をチェックサム付きＳＰＩアクセスのレスポンスバイトに含めるようにした例を示す図である。
【発明を実施するための形態】
【００２１】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。図１は本発明の実施の形態に係るレジスタ異常検出装置１００の要部の構成を示す図である。
【００２２】
図１において、１はＣＰＵ（演算処理部）、２はＩＣである。ＩＣ２には、データ受信回路２１と、コマンド制御部２２と、データ送信回路２３と、内部レジスタ２４とが設けられている。内部レジスタ２４には、ＣＲＣ値算出対象レジスタ２４−１と、ＣＲＣ値算出非対象レジスタ２４−２と、ＣＲＣ値算出部２４−３と、エラー検出レジスタ２４−４とが設けられている。
【００２３】
このレジスタ異常検出装置１００において、ＣＰＵ１から送られてくるデータはデータ受信回路２１で受信され、シリアルパラレル変換された後、コマンド制御部２２を介して内部レジスタ２４へ送られ、ＣＲＣ値算出対象レジスタ２４−１に書き込まれる。
【００２４】
内部レジスタ２４において、ＣＲＣ値算出部２４−３は、ＣＲＣ値算出対象レジスタ２４−１に書き込まれたデータのＣＲＣ期待値およびＣＲＣ現状値を算出し、算出したＣＲＣ現状値とＣＲＣ期待値との一致／不一致を判定し、その判定結果をエラー検出レジスタ２４−４に書き込む。
【００２５】
また、ＣＲＣ値算出非対象レジスタ２４−２には、ＣＲＣ値算出部２４−３によって算出されたＣＲＣ現状値が書き込まれる。このＣＲＣ値算出非対象レジスタ２４−２に書き込まれたＣＲＣ現状値およびエラー検出レジスタ２４−４に書き込まれた判定結果はＣＰＵ１によって定期的に読み出される。
【００２６】
なお、図１中、CSはチップセレクト信号、SCLKはシリアルクロック信号、MISO（Master In Slave Out）はマスタ側入力・スレーブ側出力信号、MOSI（Master Output Slave Input）はマスタ側出力・スレーブ側入力信号、REG_ERR_DETはエラー検出レジスタ２４−４から読み出される異常検出ステータス（判定結果）である。
【００２７】
図２にＣＲＣ値算出部２４−３の内部のステートマシン図を示す。ＣＲＣ値算出部２４−３は、ＣＲＣ算出イネーブルが有効な場合、ＣＲＣ値算出対象レジスタ２４−１に書き込まれているデータのＣＲＣの現状値（ＣＲＣ現状値）の算出（状態Ｓ１）と算出したＣＲＣ現状値とＣＲＣ期待値との比較を繰り返すが（状態Ｓ２）、ＣＲＣ期待値算出コマンドをＣＰＵ１から受け取るとＣＲＣ期待値の算出を開始する（状態Ｓ３）。ＣＲＣ期待値の算出を完了すると、エラー検出レジスタ２４−４の値をクリアして「０」とし（状態Ｓ４）、ＣＲＣ現状値の算出を繰り返す（状態Ｓ１）。
【００２８】
ＣＲＣ値算出部２４−３は、このＣＲＣ現状値の算出の繰り返し中、ノイズなどの異常により、ＣＲＣ値算出対象レジスタ２４−１に書き込まれているデータの値が書き変わり、ＣＲＣ現状値とＣＲＣＳ期待値との不一致が発生すると、エラー検出レジスタ２４−４の値に「１」をセットする。
【００２９】
このステータスマシン図からも分かるように、ＣＲＣ値算出部２４−３は、ＣＲＣ現状値の算出を繰り返す毎に、算出したＣＲＣ現状値とＣＲＣ期待値との一致／不一致を判定し、その判定結果をエラー検出レジスタ２４−４に書き込む。
【００３０】
本実施の形態において、エラー検出レジスタ２４−４の値は最初は「０」とされており、ＣＲＣ現状値とＣＲＣ期待値との間に不一致が生じると、このエラー検出レジスタ２４−４の値が「１」に書き替えられる。すなわち、エラー検出レジスタ２４−４の値（異常検出ステータス）は、ＣＲＣ現状値とＣＲＣ期待値との一致／不一致の判定結果が「一致」である場合には「０」とされ、「不一致」の場合には「１」とされる。「一致」である場合には、エラー検出レジスタ２４−４の値は書き替えられないが、結果的には「０」を書き込んでいると言える。
【００３１】
なお、図２において、「IDLE」は初期状態（状態Ｓ０）、「CALC」はＣＲＣ現状値の算出を行う状態（状態Ｓ１）、「RESULT」はＣＲＣ現状値とＣＲＣ期待値との比較を行う状態（状態Ｓ２）、「REF_CALC」はＣＲＣ期待値の算出を行う状態（状態Ｓ３）、「REF_RESULT」は異常検出ステータスのクリアを行う状態（状態Ｓ４）を示す。
【００３２】
また、図２において、状態Ｓ１でＣＲＣ現状値が繰り返し算出されるが、このＣＲＣ現状値は算出される毎にＣＲＣ値算出非対象レジスタ２４−２に更新記憶（上書き）される。また、状態Ｓ３でＣＲＣ期待値が算出されるが、このＣＲＣ期待値はＣＲＣ期待値算出コマンドにより１回だけ求められるものであり、ＣＲＣ値算出部２４−３内のメモリに記憶される。
【００３３】
図１において、ＣＰＵ１は、エラー検出レジスタ２４−４に書き込まれている判定結果およびＣＲＣ値算出非対象レジスタ２４−２に記憶されているＣＲＣ現状値を定期的に読み出す。そして、この読み出した判定結果（第１の判定結果）およびＣＲＣ現状値から得られる判定結果（第２の判定結果）に基づいてＣＲＣ値算出対象レジスタ２４−１に書き込まれているデータの異常を検出する。例えば、第１の判定結果が「一致」でかつ第２の判定結果も「一致」であった場合にＣＲＣ値算出対象レジスタ２４−１に書き込まれているデータが正常であると判断し、その他の場合は異常であると判断する。
【００３４】
本実施の形態において、ＣＰＵ１がＩＣ２から読み出せるＣＲＣ値は、ＣＲＣ現状値のみとされている。すなわち、ＣＰＵ１は、ＣＲＣ値算出対象レジスタ２４−１に書き込んだデータのＣＲＣ期待値とＩＣ２から読み出したＣＲＣ現状値との一致／不一致の判定結果をＣＲＣ現状値から得られる判定結果（第２の判定結果）として求めるわけだが、ＣＲＣ値算出部２４−３で算出されたＣＲＣ期待値は読み出せない。
【００３５】
この場合、ＣＰＵ１側でＣＲＣ値算出対象レジスタ２４−１に書き込むデータのＣＲＣ期待値を求めておいてもよいが、ＣＰＵ１の処理負荷が増える。そこで、本実施の形態では、ＣＰＵ１において、ＣＲＣ値算出非対象レジスタ２４−２から読み出した最初のＣＲＣ現状値（ＣＲＣ期待値算出コマンド発行後の最初のＣＲＣ現状値）をＣＰＵ１側でのＣＲＣ期待値とし、以降、ＣＲＣ値算出非対象レジスタ２４−２からＣＲＣ現状値を読み出す毎に、その読み出したＣＲＣ現状値とＣＰＵ１側でのＣＲＣ期待値との一致／不一致を判定し、その判定結果をＣＲＣ現状値から得られる判定結果（第２の判定結果）とする。
【００３６】
図３にＣＲＣ値算出部２４−３で行われる動作のタイミングチャートを示す。同図において、（ａ）〜（ｈ）はＣＲＣ値算出部２４−３の入出力信号、（ｉ），（ｊ）はＣＲＣ値算出部２４−３の内部信号である。
【００３７】
ＣＲＣ値算出部２４−３は、ＣＰＵ１からＣＲＣ期待算出コマンドを受け取ると（図３（ｃ）に示すｔ１点）、ＣＲＣ期待値の算出を開始する（図３（ｊ）に示すｔ１点）。そして、ＣＲＣ期待値の算出を終えると（図３（ｊ）に示すｔ２〜ｔ３点）、エラー検出レジスタ２４−４の値をクリアし（図３（ｆ）に示すｔ２〜ｔ３点）、ＣＲＣ現状値の算出を開始する（図３（ｊ）に示すｔ３点）。
【００３８】
ＣＲＣ値算出部２４−３は、ＣＲＣ現状値を算出する毎にＣＲＣ期待値との比較を行い、算出されたＣＲＣ現状値とＣＲＣ期待値との不一致を確認すると（図３（ｊ）に示すｔ４〜ｔ５点）、エラー検出レジスタ２４−４の値（異常検出ステータス）を「１」とする（図３（ｇ）に示すｔ４〜ｔ５点）。
【００３９】
なお、このＣＲＣ値算出部２４−３で行われる処理動作において、ＣＲＣ値期待値の算出に要する時間（ＣＲＣ期待値算出期間）ＴＡとＣＲＣ現状値の算出に要する時間（ＣＲＣ現状値算出期間）ＴＢとは同じである。例えば、ＣＲＣ値算出対象レジスタ２４−１が６０バイトであり、１バイトずつＣＲＣ算出を行ったとすると、ＣＲＣの算出に要する時間は６０サイクルとなる。
【００４０】
図４は、上述したＩＣ２側での処理を機能ブロック化した図である。ＩＣ２は、レジスタ２Ａと、データ書込部２Ｂと、ＣＲＣ期待値算出部２Ｃと、ＣＲＣ現状値算出部２Ｄと、ＣＲＣ現状値記憶部２Ｅと、ＣＲＣ期待値記憶部２Ｆと、一致／不一致判定部２Ｇと、エラー検出レジスタ２Ｈとを備えている。
【００４１】
なお、この機能ブロック図において、レジスタ２Ａは図１におけるＣＲＣ値算出対象レジスタ２４−１に相当し、ＣＲＣ現状値記憶部２ＥはＣＲＣ値算出非対象レジスタ２４−２に相当し、エラー検出レジスタ２Ｈはエラー検出レジスタ２４−４に相当する。また、ＣＲＣ期待値算出部２Ｃ、ＣＲＣ現状値算出部２Ｄ、ＣＲＣ期待値記憶部２Ｆおよび一致／不一致判定部２Ｇは、ＣＲＣ値算出部２４−３内の処理機能に対応する。
【００４２】
また、この機能ブロック図において、ＣＲＣ期待値算出部２ＣとＣＲＣ現状値算出部２Ｄとは、その処理機能を区別するために２つに分けて示しているが、ハードウェア的に別回路として存在しているわけではなく、共通の回路（同一の回路）とされている。すなわち、この共通の回路において、ＣＲＣ期待値算出コマンドを受け付けた後に算出したＣＲＣ値をＣＲＣ期待値と判断してＣＲＣ期待値記憶部２Ｆに格納し、それ以外の時に算出したＣＲＣ値をＣＲＣ現状値としてＣＲＣ現状値記憶部２Ｅに格納する。つまり、ＣＲＣ期待値の生成とＣＲＣ現状値の生成は全く同じ計算式で算出するので、別回路として存在させる必要はない。ＣＲＣ期待値とＣＲＣ現状値を同時に算出するのであれば、別回路として用意する必要があるが、この例ではＣＲＣ期待値とＣＲＣ現状値の算出は排他的に実行する。勿論、重複した構成とはなるが、ＣＲＣ期待値とＣＲＣ現状値を算出する回路を別回路として用意してもよい。
【００４３】
このＩＣ２において、データ書込部２Ｂは、ＣＰＵ１からのレジスタ書き込みコマンド（データ＋コマンド）を受けて、レジスタ２ＡにＣＰＵ１からのデータを書き込む。ＣＲＣ期待値算出部２Ｃは、ＣＰＵ１からのＣＲＣ期待値算出コマンドを受けて、レジスタ２Ａに書き込まれているデータのＣＲＣ期待値を算出する。ＣＲＣ期待値記憶部２Ｆは、ＣＲＣ期待値算出部２Ｃによって算出されたＣＲＣ期待値を記憶する。
【００４４】
ＣＲＣ現状値算出部２Ｄは、ＣＲＣ期待値算出部２ＣでＣＲＣ期待値が算出された後、レジスタ２Ａに書き込まれているデータのＣＲＣ期待値に対応するＣＲＣ現状値の算出を繰り返す。ＣＲＣ現状値記憶部２Ｅは、ＣＲＣ現状値算出部２ＤによってＣＲＣ現状値が算出される毎に、算出されたＣＲＣ現状値を更新記憶する。
【００４５】
一致／不一致判定部２Ｇは、ＣＲＣ現状値算出部２ＤによってＣＲＣ現状値が算出される毎に、算出されたＣＲＣ現状値とＣＲＣ期待値との一致／不一致を判定し、その判定結果（「０」／「１」）を第１の判定結果としてエラー検出レジスタ２Ｈに書き込む。なお、エラー検出レジスタ２Ｈに書き込まれている値は、ＣＲＣ期待値算出部２ＣでのＣＲＣ期待値の算出が完了する毎にクリアされる。
【００４６】
図５は上述したＩＣ２側での処理を示すフローチャートである。データ書込部２Ｂは、ＣＰＵ１からレジスタ書き込みコマンドが送られてくると（ステップＳ１０１のＹＥＳ）、レジスタ２Ａにデータを書き込む（ステップＳ１０２）。ＣＲＣ期待値算出部２Ｃは、レジスタ書き込みコマンドの発行後、ＣＰＵ１からＣＲＣ期待値算出コマンドが送れてくると（ステップＳ１０３のＹＥＳ）、ＣＲＣ期待値を算出する（ステップＳ１０４）。また、このＣＲＣ期待値の算出後、エラー検出レジスタ２Ｈの値をクリアする（ステップＳ１０５）。
【００４７】
ＣＲＣ現状値算出部２Ｄは、ＣＲＣ期待値算出部２ＣでのＣＲＣ期待値の算出が完了すると、ＣＲＣ現状値の算出を開始する（ステップＳ１０６）。一致／不一致判定部２Ｇは、ＣＲＣ現状値算出部２ＤでのＣＲＣ現状値の算出が完了すると、この算出したＣＲＣ現状値とＣＲＣ期待値算出部２Ｃが算出したＣＲＣ期待値との一致／不一致を判定する（ステップＳ１０７）。
【００４８】
一致／不一致判定部２Ｇでの一致／不一致の判定は、ＣＲＣ現状値算出部２ＤでＣＲＣ現状値が算出される毎に繰り返され（ステップＳ１０１→Ｓ１０６→Ｓ１０７の繰り返し）、このＣＲＣ現状値の算出の繰り返し中に「不一致」であるとの判定結果が得られた場合、一致／不一致判定部２Ｇはエラー検出レジスタ２Ｈの値を「１」とする（ステップＳ１０８）。
【００４９】
図６は上述したＣＰＵ１側での処理を示すフローチャートである。ＣＰＵ１は、ＩＣ２のリセットを解除した後（ステップＳ２０１）、ＩＣ２に対してレジスタ書き込みコマンドを発行したか否かを確認する（ステップＳ２０２）。ＩＣ２に対するレジスタ書き込みコマンドの発行を確認すると（ステップＳ２０２のＹＥＳ）、ＩＣ２に対してＣＲＣ期待値算出コマンドを発行する（ステップＳ２０３）。
【００５０】
そして、ＣＰＵ１は、ＩＣ２においてＣＲＣ値の算出が完了するのを待って（ステップＳ２０４）、ＣＲＣ現状値記憶部２Ｅに記憶されているＣＲＣ現状値（ＣＲＣ期待値算出コマンド発行後の最初のＣＲＣ現状値）を読み出し、その読み出したＣＲＣ現状値をＣＰＵ１側でのＣＲＣ期待値として保存する（ステップＳ２０５）。
【００５１】
そして、ＣＰＵ１は、エラー検出レジスタ２Ｈに書き込まれている判定結果（第１の判定結果）およびＣＲＣ現状値記憶部２Ｅに記憶されているＣＲＣ現状値を読み出し（ステップＳ２０６）、エラー検出レジスタ２Ｈから読み出した判定結果（第１の判定結果）が「０」で、かつＣＲＣ現状値記憶部２Ｅから読み出したＣＲＣ現状値とステップＳ２０５で保存したＣＰＵ１側のＣＲＣ期待値とが一致していた場合（第２の判定結果が「０」であった場合）（ステップＳ２０７のＹＥＳ）、すなわち第１の判定結果が「一致」でかつ第２の判定結果も「一致」であった場合、レジスタ２Ａに書き込まれているデータは正常であると判断し、ステップＳ２０２に戻る。
【００５２】
ＣＰＵ１は、ＩＣ２に対してレジスタ書き込みコマンドを１度発行すると、次のレジスタ書き込みコマンドを発行するまで、ステップＳ２０２，Ｓ２０６，２０７の処理を繰り返す。このステップＳ２０２，Ｓ２０６，Ｓ２０７の処理の繰り返し中、第１の判定結果が「一致」でかつ第２の判定結果も「一致」であるという結果が得られなかった場合（ステップＳ２０７のＮＯ）、すなわち第１の判定結果と第２の判定結果の少なくとも一方が「不一致」であった場合、ＣＰＵ１は、レジスタ２Ａに書き込まれているデータに異常が生じているものと判断し、異常処理を行う（ステップＳ２０８）。このステップＳ２０８での異常処理の内容は、各システムで適切な方法を決定する。
【００５３】
このようにして、本実施の形態のレジスタ異常検出装置１００によれば、ＩＣ２側での判定結果（第１の判定結果）とＣＰＵ１側での判定結果（第２の判定結果）が共に「一致」となった場合にレジスタ２Ａに書き込まれているデータが正常であると判断され、その他の場合は異常であると判断されるものとなる。これにより、ＣＰＵ１として処理能力の高いＣＰＵを用いることなく、異常検出の信頼性を高めることができるようになる。
【００５４】
なお、上述では説明を省略したが、このレジスタ異常検出装置１００では、ＩＣ２側での第１の判定結果とＣＰＵ１側での第２の判定結果とに基づいてレジスタ２Ａに書き込まれているデータの異常を検出するか、ＩＣ２側での第１の判定結果のみでレジスタ２Ａに書き込まれているデータの異常を検出するか、ＣＰＵ１側での第２の判定結果のみでレジスタ２Ａに書き込まれているデータの異常を検出するかについて、選択することが可能とされている。
【００５５】
この場合、ＣＰＵ１は、レジスタの異常検出方式として第１の方式が選択されている場合には、ＩＣ２側での第１の判定結果のみでレジスタ２Ａに書き込まれているデータの異常を検出し、第２の方式が選択されている場合には、ＣＰＵ１側での第２の判定結果のみでレジスタ２Ａに書き込まれているデータの異常を検出し、第３の方式が選択されている場合には、ＩＣ２側での第１の判定結果とＣＰＵ１側での第２の判定結果とに基づいてレジスタ２Ａに書き込まれているデータの異常を検出する。
【００５６】
図７に第１の方式が選択されている場合のＣＰＵ１側で行われる処理のフローチャートを示す。この場合、ＣＰＵ１は、ＩＣ２のリセットを解除した後（ステップＳ３０１）、ＩＣ２に対してレジスタ書き込みコマンドを発行したか否かを確認する（ステップＳ３０２）。ＩＣ２に対するレジスタ書き込みコマンドの発行を確認すると（ステップＳ３０３のＹＥＳ）、ＩＣ２に対してＣＲＣ期待値算出コマンドを発行する（ステップＳ３０３）。
【００５７】
そして、ＣＰＵ１は、ＩＣ２においてＣＲＣ値の算出が完了するのを待って（ステップＳ３０４）、エラー検出レジスタ２Ｈに書き込まれている判定結果（第１の判定結果）を読み出し（ステップＳ３０５）、エラー検出レジスタ２Ｈから読み出した判定結果（第１の判定結果）が「１」でなかった場合には（ステップＳ３０６のＮＯ）、すなわち第１の判定結果が「０」であった場合には、レジスタ２Ａに書き込まれているデータは正常であると判断し、ステップＳ３０２に戻る。
【００５８】
ＣＰＵ１は、ＩＣ２に対してレジスタ書き込みコマンドを１度発行すると、次のレジスタ書き込みコマンドを発行するまで、ステップＳ３０２，Ｓ３０５，Ｓ３０６の処理を繰り返す。このステップＳ３０２，Ｓ３０５，Ｓ３０６の処理の繰り返し中、第１の判定結果が「１」となった場合（ステップＳ３０６のＹＥＳ）、すなわち第１の判定結果が「不一致」となった場合、ＣＰＵ１は、レジスタ２Ａに書き込まれているデータに異常が生じているものと判断し、異常処理を行う（ステップＳ３０７）。このステップＳ３０７での異常処理の内容は、各システムで適切な方法を決定する。
【００５９】
図８に第２の方式が選択されている場合のＣＰＵ１側で行われる処理動作のフローチャートを示す。この場合、ＣＰＵ１は、ＩＣ２のリセットを解除した後（ステップＳ４０１）、ＩＣ２に対してレジスタ書き込みコマンドを発行したか否かを確認する（ステップＳ４０２）。ＩＣ２に対するレジスタ書き込みコマンドの発行を確認すると（ステップＳ４０３のＹＥＳ）、ＩＣ２に対してＣＲＣ期待値算出コマンドを発行する（ステップＳ４０３）。
【００６０】
そして、ＣＰＵ１は、ＩＣ２においてＣＲＣ値の算出が完了するのを待って（ステップＳ４０４）、ＣＲＣ現状値記憶部２Ｅに記憶されているＣＲＣ現状値（ＣＲＣ期待値算出コマンド発行後の最初のＣＲＣ現状値）を読み出し、その読み出したＣＲＣ現状値をＣＰＵ１側でのＣＲＣ期待値として保存する（ステップＳ４０５）。
【００６１】
そして、ＣＰＵ１は、ＣＲＣ現状値記憶部２Ｅに記憶されているＣＲＣ現状値を読み出し（ステップＳ４０６）、このＣＲＣ現状値記憶部２Ｅから読み出したＣＲＣ現状値とステップＳ４０５で保存したＣＰＵ１側のＣＲＣ期待値とが一致していた場合（ステップＳ４０７のＹＥＳ）、すなわち第２の判定結果が「一致」であった場合、レジスタ２Ａに書き込まれているデータは正常であると判断し、ステップＳ４０２に戻る。
【００６２】
ＣＰＵ１は、ＩＣ２に対してレジスタ書き込みコマンドを１度発行すると、次のレジスタ書き込みコマンドを発行するまで、ステップＳ４０２，Ｓ４０６，Ｓ４０７の処理を繰り返す。このステップＳ４０２，Ｓ４０６，Ｓ４０７の処理の繰り返し中、第２の判定結果が「一致」であるという結果が得られなかった場合（ステップＳ４０７のＮＯ）、すなわち第２の判定結果が「不一致」であった場合、ＣＰＵ１は、レジスタ２Ａに書き込まれているデータに異常が生じているものと判断し、異常処理を行う（ステップＳ４０８）。このステップＳ４０８での異常処理の内容は、各システムで適切な方法を決定する。
【００６３】
第３の方式が選択されている場合には図６を用いて説明した処理が行われる。なお、必ずしもこのような第１，第２，第３の方式が選択可能な構成としなくてもよく、第３の方式が単独で採用されていても構わない。また、本実施の形態において、ＣＰＵ１はＩＣ２から異常検出ステータスおよびＣＲＣ現状値の少なくとも一方を読み出すが、この読み出した異常検出ステータスやＣＲＣ現状値どのように利用するかはユーザ次第である。
【００６４】
また、上述した実施の形態では、ＣＲＣ値の具体的な算出方法については述べなかったが、実際には多項式としてC「RC-16-CCITT（X^16+X^12+X^5+1）」を使用する。勿論、他の多項式（例えば、「CRC-16」や「CRC-32」）を使用してＣＲＣ値を算出してもよい。また、ＣＲＣではなく、「MODBUS ASCII」のチックサム算出で用いられている「２の補数和の２の補数」を使用するなどしてもよい。
【００６５】
〔派生効果〕
図１において、ＣＲＣ値算出対象レジスタ２４−１には動作前に必ず任意の値を書き込むため、ＣＲＣ値算出対象レジスタ２４−１に書き込まれているデータのＣＲＣ現状値はＩＣ２の動作中、初期値とは異なる値となる。そのため、ＩＣ２の動作中にＣＰＵ１からＣＲＣ現状値を監視することで、ノイズなどの影響で予期せぬリセットがかかっていないかどうかを確認できる。すなわち、リセットがかかればＣＲＣ現状値が初期値になることを利用することによって、予期せぬリセットがかかっていないかどうかを確認することができる。
【００６６】
また、図１において、ＣＰＵ１への異常通知方法として、エラー検出レジスタ２４−４の値を通信プロトコルに含めるという方法もある。例えば、図９に示すように、MISO信号の「0x04」を内部レジスタ異常検出と割り当て、ＩＣ内部状態もチェックサム付きＳＰＩアクセスのレスポンスに含めてしまうようにする。これにより、ＣＰＵ１からエラー検出レジスタ２４−４をポーリングする頻度を下げることができる。
【００６７】
〔実施の形態の拡張〕
以上、実施の形態を参照して本発明を説明したが、本発明は上記の実施の形態に限定されるものではない。本発明の構成や詳細には、本発明の技術思想の範囲内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【００６８】
１…ＣＰＵ（演算処理部）、２…ＩＣ、２１…データ受信回路、２２…コマンド制御部、２３…データ送信回路、２４…内部レジスタ、２４−１…ＣＲＣ値算出対象レジスタ、２４−２…ＣＲＣ値算出非対象レジスタ、２４−３…ＣＲＣ値算出部、２４−４…エラー検出レジスタ、２Ａ…レジスタ、２Ｂ…データ書込部、２Ｃ…ＣＲＣ期待値算出部、２Ｄ…ＣＲＣ現状値算出部、２Ｅ…ＣＲＣ現状値記憶部、２Ｆ…ＣＲＣ期待値記憶部、２Ｇ…一致／不一致判定部、２Ｈ…エラー検出レジスタ、１００…レジスタ異常検出装置。
【図１】
0006718294.tif 000002
【図２】
0006718294.tif 000003
【図３】
0006718294.tif 000004
【図４】
0006718294.tif 000005
【図５】
0006718294.tif 000006
【図６】
0006718294.tif 000007
【図７】
0006718294.tif 000008
【図８】
0006718294.tif 000009
【図９】
0006718294.tif 000010