(57)【要約】【課題】セルフ・プログラミング技術を適応した電子回路に関し、この電子回路を搭載した基板の製造効率を向上させる。【解決手段】ユーザ・プログラム・コードとセルフ・プログラミング・プログラム・コードと誤り検出符号とを記憶するための領域を有するフラッシュメモリ５０と、フラッシュメモリ５０へのデータ書き込みが完了しているか否かを示す書き込み状態データを記憶するＥＥＰＲＯＭ６０と、電子回路１が起動される際に、ＥＥＰＲＯＭ６０から書き込み状態データを読み込み、この書き込み状態データが書き込み未完了を示し、且つフラッシュメモリ５０から誤り検出符号を読み込み、この誤り検出符号が正常を示す場合は、フラッシュメモリ５０からユーザ・プログラム・コードを読み込み、このユーザ・プログラム・コードを起動させるＣＰＵ１０と、を備える。【選択図】図２
2013186534.tif 000002
【特許請求の範囲】
【請求項１】
ユーザ・プログラム・コードと前記ユーザ・プログラム・コードを書き換えるためのセルフ・プログラミング・プログラム・コードと誤り検出符号とを記憶するための領域を有するフラッシュメモリと、
前記フラッシュメモリへのデータ書き込みが完了しているか否かを示す書き込み状態データを記憶するための領域を有する記憶部と、
当該電子回路が起動される際に、前記記憶部における前記書き込み状態データを記憶するための領域から第１のデータを読み込み、前記第１のデータが書き込み未完了を示し、且つ前記フラッシュメモリにおける前記誤り検出符号を記憶するための領域から第２のデータを読み込み、前記第２のデータが正常を示す場合は、前記フラッシュメモリにおける前記ユーザ・プログラム・コードを記憶するための領域から前記ユーザ・プログラム・コードを読み込み、前記ユーザ・プログラム・コードを起動させる制御部と、
を備えることを特徴とする電子回路。
【請求項２】
前記制御部は、前記第１のデータが前記書き込み未完了を示し、且つ前記第２のデータが異常を示す場合は、前記フラッシュメモリにおける前記セルフ・プログラミング・プログラム・コードを記憶するための領域から前記セルフ・プログラミング・プログラム・コードを読み込み、前記セルフ・プログラミング・プログラム・コードを起動させる
ことを特徴とする請求項１記載の電子回路。
【請求項３】
前記誤り検出符号は、前記フラッシュメモリに記憶されるデータのチェックサムであることを特徴とする請求項１または２記載の電子回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子回路に関する。
【背景技術】
【０００２】
フラッシュメモリにユーザ・プログラムとセルフ・プログラミング・プログラムとを記憶させておき、外部からの操作にしたがって、セルフ・プログラミング・プログラムを実行させてユーザ・プログラムを新たなユーザ・プログラムに書き換えるセルフ・プログラミング技術が知られている（例えば、特許文献１参照）。
【０００３】
このようなセルフ・プログラミング技術を適応した電子回路において、セルフ・プログラミング・プログラムの実行中に、例えばこの電子回路への供給電源が切れる等の事象が発生すると、フラッシュメモリは、ユーザ・プログラムを正常に書き込んでいない状態となる。この状態における電子回路は、ユーザ・プログラムを正常に実行できないため、正常に動作しないばかりか、セルフ・プログラミング・プログラムも起動できないおそれがある。
【０００４】
上記のような状態になることを防ぐため、従来の電子回路には、フラッシュメモリにユーザ・プログラムを書き込んだ際に、書き込み完了を示すフラグをフラッシュメモリとは別の不揮発性メモリに記憶させる回路を設ける場合がある。このような回路を設けた電子回路における制御部は、起動後に不揮発性メモリに記憶されたフラグの状態を確認し、このフラグが書き込み未完了を示す場合に、セルフ・プログラミング・プログラムを実行させてユーザ・プログラムの自己書き込み処理を行う。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０−１６１９８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記の電子回路を搭載する電子回路アセンブリ基板の製造工程では、以下のような問題が発生する。つまり、例えば、電子回路アセンブリ基板の第１製造工程では、基板に各種部品を搭載して基板アセンブリの半田付けを行う。この段階では、基板に設けられたフラッシュメモリおよび不揮発性メモリは未書き込みの状態である。次に、第２製造工程では、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）ライタによりユーザ・プログラム・コードおよびセルフ・プログラミング・プログラム・コードをフラッシュメモリに書き込む。次に、第３製造工程では、電子回路アセンブリ基板に電源を供給して回路を動作させる。しかし、このとき、不揮発性メモリが未書き込みの状態であるため、制御部は、フラグが書き込み未完了を示すと判定してしまう。これにより、フラッシュメモリにユーザ・プログラムが正常に記憶されているにも関わらず、制御部は、セルフ・プログラミング・プログラムを実行させてユーザ・プログラムの自己書き込み処理を開始してしまう。したがって、電子回路アセンブリ基板の製造において、工程に無駄が生じていた。
【０００７】
本発明は、上記問題を解決するためになされたものであり、セルフ・プログラミング技術を適応した電子回路に関し、この電子回路を搭載した基板の製造効率を向上することができる、電子回路を提供することを目的とする。
【課題を解決するための手段】
【０００８】
［１］上記の課題を解決するため、本発明の一態様である電子回路は、ユーザ・プログラム・コードと前記ユーザ・プログラム・コードを書き換えるためのセルフ・プログラミング・プログラム・コードと誤り検出符号とを記憶するための領域を有するフラッシュメモリと、前記フラッシュメモリへのデータ書き込みが完了しているか否かを示す書き込み状態データを記憶するための領域を有する記憶部と、当該電子回路が起動される際に、前記記憶部における前記書き込み状態データを記憶するための領域から第１のデータを読み込み、前記第１のデータが書き込み未完了を示し、且つ前記フラッシュメモリにおける前記誤り検出符号を記憶するための領域から第２のデータを読み込み、前記第２のデータが正常を示す場合は、前記フラッシュメモリにおける前記ユーザ・プログラム・コードを記憶するための領域から前記ユーザ・プログラム・コードを読み込み、前記ユーザ・プログラム・コードを起動させる制御部と、を備えることを特徴とする。
［２］上記［１］記載の電子回路において、前記制御部は、前記第１のデータが前記書き込み未完了を示し、且つ前記第２のデータが異常を示す場合は、前記フラッシュメモリにおける前記セルフ・プログラミング・プログラム・コードを記憶するための領域から前記セルフ・プログラミング・プログラム・コードを読み込み、前記セルフ・プログラミング・プログラム・コードを起動させることを特徴とする。
［３］上記［１］または［２］記載の電子回路において、前記誤り検出符号は、前記フラッシュメモリに記憶されるデータのチェックサムであることを特徴とする。
【発明の効果】
【０００９】
本発明によれば、セルフ・プログラミング技術を適応した電子回路に関し、この電子回路を搭載した基板の製造効率を向上することができる。
【図面の簡単な説明】
【００１０】
【図１】本実施形態である電子回路に搭載されるフラッシュメモリの概略のメモリマップである。
【図２】本実施形態である電子回路の概略の機能構成を示す図である。
【図３】同実施形態において、電子回路の動作手順を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための形態について、図面を参照して詳細に説明する。
本発明の一実施形態である電子回路は、制御部であるＣＰＵ（中央処理ユニット、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、このＣＰＵに実行させるためのプログラム・コード（単に、プログラムともいう。）を記憶するフラッシュメモリ（Ｆｌａｓｈ  ｍｅｍｏｒｙ）と、を搭載するＣＰＵ回路に適用される。
【００１２】
まず、本実施形態である電子回路に搭載されるフラッシュメモリのメモリマップについて説明する。
図１は、本実施形態である電子回路に搭載されるフラッシュメモリの概略のメモリマップである。同図に示すように、フラッシュメモリの記憶領域であるプログラミング対象領域は、セルフ・プログラミング対象領域とセルフ・プログラミング非対象領域とに分割される。セルフ・プログラミング対象領域は、ユーザ・プログラム領域と誤り検出符号領域とに分割される。また、セルフ・プログラミング非対象領域は、ブート・プログラム領域とセルフ・プログラミング・プログラム領域とに分割される。
【００１３】
ユーザ・プログラム領域は、ユーザ・プログラム・コードを記憶する領域である。誤り検出符号領域は、誤り検出符号を記憶する領域である。セルフ・プログラミング・プログラム領域は、セルフ・プログラミング・プログラム・コードを記憶する領域である。ブート・プログラム領域は、ブート・プログラム・コードを記憶する領域である。
【００１４】
セルフ・プログラミング対象領域は、ＣＰＵがセルフ・プログラミング・プログラム・コードを実行することによって、書き換え可能な記憶領域である。セルフ・プログラミング非対象領域は、ＣＰＵがセルフ・プログラミング・プログラム・コードを実行することによって、書き換えることができない記憶領域である。ただし、セルフ・プログラミング対象領域およびセルフ・プログラミング非対象領域、またはいずれかは、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）ライタによって書き換えることが可能である。
なお、セルフ・プログラミング対象領域およびセルフ・プログラミング非対象領域それぞれは、単一の領域に限らず、複数の領域に分割されていてもよい。
【００１５】
ブート・プログラム・コードは、電子回路の起動時に、ＣＰＵが実行するプログラム・コードである。セルフ・プログラミング・プログラム・コードは、フラッシュメモリのセルフ・プログラミング対象領域を書き換える（更新する）ために、ＣＰＵが実行するプログラム・コードである。ユーザ・プログラム・コードは、電子回路の所望の機能を実現させるために、ＣＰＵが実行するプログラム・コードである。
【００１６】
誤り検出符号は、例えばプログラミング対象領域の記憶データに対する誤り検出符号である。この誤り検出符号は、例えばチェックサムである。本実施形態では、プログラミング対象領域に記憶すべきデータの総計における下位２バイトが“０（ゼロ）”となるように、その記憶すべきデータはあらかじめ調整されている。つまり、本実施形態において、フラッシュメモリに記憶される誤り検出符号は、チェックサム“０（ゼロ）”である。
【００１７】
図２は、本実施形態である電子回路の概略の機能構成を示す図である。同図に示すように、電子回路１は、ＣＰＵ（制御部）１０と、アドレスバス２０と、データバス３０と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４０と、フラッシュメモリ５０と、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）（記憶部）６０と、通信インタフェース７０と、電源供給部８０とを備える。
【００１８】
ＥＥＰＲＯＭ６０は、記憶データを書き換え可能な不揮発性半導体メモリである。ＥＥＰＲＯＭ６０は、フラッシュメモリ５０とは別体（別個）の半導体メモリである。
ＥＥＰＲＯＭ６０は、ＣＰＵ１０の制御により、書き込み状態データ（第１のデータ）を記憶する。書き込み状態データは、フラッシュメモリ５０のプログラミング対象領域へのデータ書き込みが完了しているか否かを示すデータである。例えば、書き込み状態データは、データ書き込みが完了していることを示す場合に“１”、データ書き込みが未完了であることを示す場合に“０（ゼロ）”である。
【００１９】
フラッシュメモリ５０は、記憶データを書き換え可能な不揮発性半導体メモリである。フラッシュメモリ５０は、フラッシュＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュＥＥＰＲＯＭとも呼ばれる。
フラッシュメモリ５０は、例えば、図１に示したメモリマップを有する。つまり、フラッシュメモリ５０は、プログラミング対象領域に、ユーザ・プログラム領域および誤り検出符号領域を含むセルフ・プログラミング対象領域と、ブート・プログラム領域およびセルフ・プログラミング・プログラム領域を含むセルフ・プログラミング非対象領域とを設けている。そして、フラッシュメモリ５０は、ユーザ・プログラム領域にユーザ・プログラム・コードを記憶し、誤り検出符号領域に誤り検出符号（第２のデータ）を記憶する。また、フラッシュメモリ５０は、ブート・プログラム領域にブート・プログラム・コードを記憶し、セルフ・プログラミング・プログラム領域にセルフ・プログラミング・プログラム・コードを記憶する。
【００２０】
ＲＡＭ４０は、揮発性半導体メモリであり、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）により実現される。ＲＡＭ４０は、ＣＰＵ１０がブート・プログラム・コード、セルフ・プログラミング・プログラム・コード、およびユーザ・プログラム・コードいずれかのプログラム・コードを実行する際に、そのプログラム・コードや変数等の作業用データを記憶する。また、ＲＡＭ４０は、通信インタフェース７０を介して外部から取り込むデータ、例えば、ＲＯＭライタから供給される更新すべきユーザ・プログラム・データおよび誤り検出符号を作業用データとして記憶する。
【００２１】
ＣＰＵ１０は、フラッシュメモリ５０に記憶されたブート・プログラム・コード、セルフ・プログラミング・プログラム・コード、およびユーザ・プログラム・コードいずれかのプログラム・コードを読み込み、またはＲＡＭ４０に読み出し、そのプログラム・コードを実行する。
【００２２】
具体的に、ＣＰＵ１０は、電源供給部８０から直流電源が供給されると、フラッシュメモリ５０からブート・プログラム・コードを読み込み、またはＲＡＭ４０に読み出し、そのブート・プログラム・コードを実行する。ＣＰＵ１０は、ブート・プログラム・コードを実行することにより、次の機能を実現する。
【００２３】
すなわち、ＣＰＵ１０は、ＥＥＰＲＯＭ６０に記憶された書き込み状態データが書き込み完了を示すと判定する場合、フラッシュメモリ５０に記憶されたユーザ・プログラム・コードを起動するよう制御する。
【００２４】
一方、ＣＰＵ１０は、ＥＥＰＲＯＭ６０に記憶された書き込み状態データが書き込み未完了を示すと判定する場合、フラッシュメモリ５０における誤り検出符号領域のデータを取り込む。そして、ＣＰＵ１０は、フラッシュメモリ５０のプログラミング対象領域の誤り検出符号を計算する。例えば、ＣＰＵ１０は、プログラミング対象領域に記憶されたデータの総和を計算し、総計の下位２バイトを抽出する。そして、ＣＰＵ１０は、誤り検出符号領域のデータと計算した誤り検出符号とを比較する。そして、ＣＰＵ１０は、誤り検出符号領域のデータと計算した誤り検出符号とが同値である（正常である）と判定する場合、フラッシュメモリ５０に記憶されたユーザ・プログラム・コードを起動するよう制御する。一方、ＣＰＵ１０は、誤り検出符号領域のデータと計算した誤り検出符号とが異値である（異常である）と判定する場合、フラッシュメモリ５０に記憶されたセルフ・プログラミング・プログラムを起動するよう制御する。
【００２５】
また、ＣＰＵ１０は、ユーザ・プログラム・コードを起動する制御により、フラッシュメモリ５０からユーザ・プログラム・コードを読み込み、またはＲＡＭ４０に読み出し、そのユーザ・プログラム・コードを実行する。ＣＰＵ１０は、ユーザ・プログラム・コードを実行することにより、電子回路１の各部を制御し、電子回路１の所望の機能を実現させる。
【００２６】
また、ＣＰＵ１０は、セルフ・プログラミング・プログラム・コードを起動する制御により、フラッシュメモリ５０からセルフ・プログラミング・プログラム・コードを読み込み、またはＲＡＭ４０に読み出し、そのセルフ・プログラミング・プログラム・コードを実行する。ＣＰＵ１０は、セルフ・プログラミング・プログラム・コードを実行することにより、例えば、通信インタフェース７０を介して外部のコンピュータ装置から供給される、新規ユーザ・プログラム・コードおよび新規誤り検出符号を、ＲＡＭ４０をバッファとして用いて取り込む。そして、ＣＰＵ１０は、取り込んだ新規ユーザ・プログラム・コードおよび新規誤り検出符号を、フラッシュメモリ５０のユーザ・プログラム領域および誤り検出符号領域にそれぞれ書き込む。そして、ＣＰＵ１０は、フラッシュメモリ５０への新規ユーザ・プログラム・コードおよび新規誤り検出符号の書き込み処理が終了すると、ＥＥＰＲＯＭ６０に記憶された書き込み状態データを、データ書き込みが完了していることを示すデータ（例えば“１”）に書き換える。
【００２７】
通信インタフェース７０は、外部の装置と電子回路１とを通信接続するためのインタフェース回路である。電子回路１は、通信インタフェース７０を介して、外部のコンピュータ装置からデータを取り込んだり、ＲＡＭ４０に記憶されたデータを、通信インタフェース７０を介して外部のコンピュータ装置に供給したりする。通信インタフェース７０は、例えば、ＲＯＭライタと接続するための専用コネクタを有してもよいし、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）コネクタ等の汎用コネクタを有してもよい。
【００２８】
アドレスバス２０は、ＣＰＵ１０とＲＡＭ４０とフラッシュメモリ５０とＥＥＰＲＯＭと通信インタフェース７０とを接続する複数のアドレスラインである。
データバス３０は、ＣＰＵ１０とＲＡＭ４０とフラッシュメモリ５０とＥＥＰＲＯＭ６０と通信インタフェース７０とを接続する複数のデータラインである。
電源供給部８０は、電子回路１の各部に直流電源を供給する。
【００２９】
次に、本実施形態である電子回路１の動作について説明する。
図３は、電子回路１の動作手順を示すフローチャートである。
ステップＳ１において、電子回路１の電源が投入されると、電源供給部８０が直流電源を電子回路１の各部に供給する。
次に、ステップＳ２において、ＣＰＵ１０は、フラッシュメモリ５０からブート・プログラム・コードを読み込み、またはＲＡＭ４０に読み出し、そのブート・プログラム・コードの実行を開始させる。
【００３０】
次に、ステップＳ３において、ＣＰＵ１０は、ＥＥＰＲＯＭ６０から書き込み状態データを読み込み、またはＲＡＭ４０に読み出す。
次に、ステップＳ４において、ＣＰＵ１０は、書き込み状態データが書き込み未完了を示すデータ（例えば“０（ゼロ）”）である場合はステップＳ５の処理に移し、書き込み状態データが書き込み完了を示すデータ（例えば“１”）である場合はステップＳ９の処理に移す。
【００３１】
ステップＳ５の処理において、ＣＰＵ１０は、フラッシュメモリ５０における誤り検出符号領域のデータを読み込み、またはＲＡＭ４０に読み出す。
次に、ステップＳ６において、ＣＰＵ１０は、フラッシュメモリ５０のプログラミング対象領域の誤り検出符号を計算する。例えば、ＣＰＵ１０は、プログラミング対象領域に記憶されたデータの総和を計算し、総計の下位２バイトを抽出する。
【００３２】
次に、ステップＳ７において、ＣＰＵ１０は、ステップＳ５の処理において得た誤り検出符号領域のデータと、ステップＳ６の処理において計算した誤り検出符号とを比較する。
次に、ＣＰＵ１０は、誤り検出符号領域のデータと計算した誤り検出符号とが異値である（異常である）と判定する場合はステップＳ８の処理に移し、誤り検出符号領域のデータと計算した誤り検出符号とが同値である（正常である）と判定する場合はステップＳ９の処理に移す。
【００３３】
ステップＳ８において、ＣＰＵ１０は、フラッシュメモリ５０からセルフ・プログラミング・プログラム・コードを読み込み、またはＲＡＭ４０に読み出し、そのセルフ・プログラミング・プログラム・コードの実行を開始させる。
【００３４】
一方、ステップＳ９において、ＣＰＵ１０は、フラッシュメモリ５０からユーザ・プログラム・コードを読み込み、またはＲＡＭ４０に読み出し、そのユーザ・プログラム・コードの実行を開始させる。
【００３５】
以上説明した電子回路１を搭載する電子回路アセンブリ基板の製造工程について説明する。
例えば、電子回路１を搭載する電子回路アセンブリ基板の第１製造工程では、基板に各種部品を搭載して基板アセンブリの半田付けを行う。この段階では、基板に設けられたフラッシュメモリ５０およびＥＥＰＲＯＭ６０は未書き込みの状態である。次に、第２製造工程では、ＲＯＭライタによりユーザ・プログラム・コード、誤り検出符号、ブート・プログラム・コード、およびセルフ・プログラミング・プログラム・コードを含むデータを、フラッシュメモリ５０のプログラミング対象領域に書き込む。次に、第３製造工程では、電子回路アセンブリ基板に電源を供給して回路を動作させる。このとき、ＥＥＰＲＯＭ６０は未書き込みの状態、つまり、書き込み状態データは不定である。しかし、ＣＰＵ１０は、ＥＥＰＲＯＭ６０の書き込み状態データが不定である場合でも、フラッシュメモリ５０の誤り検出符号領域に記憶されたデータを取り込んで、プログラミング対象領域に記憶されたデータが正常であるか否かを判定することができる。よって、ＣＰＵ１０は、フラッシュメモリ５０に正常にデータが書き込まれていることを判定できるため、通常動作としての、ユーザ・プログラムの起動に遷移することができる。
【００３６】
したがって、本発明の一実施形態である電子回路１は、セルフ・プログラミング・プログラムの実行中に、ＣＰＵ１０への供給電源が切れる等の事象が発生した場合に、再度電源を投入した際に、再度セルフ・プログラミング・プログラムを実行させることができる。さらに、本実施形態である電子回路１は、ＥＥＰＲＯＭ６０の記憶データが不定である状態で、ＲＯＭライタでフラッシュメモリ５０のプログラミング対象領域にデータを書き込んだ後に起動させた場合、フラッシュメモリ５０に正常にデータが書き込まれているにも関わらずセルフ・プログラミング・プログラムが起動することがない。
つまり、電子回路１を搭載する電子回路アセンブリ基板の製造において、工程に無駄が生じることがない。
【００３７】
なお、本実施形態である電子回路１の動作手順において、ステップＳ６の処理を省略してもよい。この場合、ＣＰＵ１０は、フラッシュメモリ５０の誤り検出符号領域に記憶されるべき正しい（正常を示す）誤り検出符号を、例えばブート・プログラムに含めておく。そして、ステップＳ７において、ＣＰＵ１０が、ステップＳ５の処理において得た誤り検出符号領域のデータと、ブート・プログラムに含められた「正しい」誤り検出符号とを比較すればよい。
【００３８】
以上、本発明の実施の形態について図面を参照して詳述したが、具体的な構成はその実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【００３９】
１  電子回路
１０  ＣＰＵ（制御部）
２０  アドレスバス
３０  データバス
４０  ＲＡＭ
５０  フラッシュメモリ
６０  ＥＥＰＲＯＭ（記憶部）
７０  通信インタフェース
８０  電源供給部
【図１】
2013186534.tif 000003
【図２】
2013186534.tif 000004
【図３】
2013186534.tif 000005