他の多くの人々と同じように、私はベン・イーターのシリーズに触発され、稼ぎ船に8ビットのコンピューターを構築することを目指しています。彼の作品を再現したかったのです(そして、将来自分のアイデアでデザインを改善しました)。ただし、購入する必要があるコンポーネントのリストを作成すると、EEPROMチップが最近どこにでもほとんど手に負えないことがわかり、この問題を解決する方法を疑問に思いました。
いくつかの調査の後、SST39SF010フラッシュチップは28C16 EEPROMチップベンイーターの使用に非常に似ていることがわかりました。また、ライティング/ beneater/eeprom-programmerスピード、保持時間、電力消費など、多くの改善があります。 slu4coderSST39SF010-FLASH-Programmer必要なものになる可能性があります。しかし、私の意見では、それはベンのプロジェクトの背後にある教育のアイデアに関して非常に異なるスタイルで書かれていました。
そこで、私は自分のプログラマーを書くことにしました。これは、SLU4Coderよりも確かに最適化されていませんが、コーディングの経験がなくてもフラッシュプログラミングにアプローチしたい初心者に適していると思います。このため、私はコードにコメントし、自分のスタイルで可能な限り明確にしようとしました。私のプロジェクトは、前述の2つのプロジェクトと同様に、2つの74HC595チップと組み合わせたArduino Nanoにも基づいています。
このソフトウェアは、将来SST39SF0x0ジェネリックフラッシュチップと互換性があるように拡張するかもしれません。ここに来て、より高い容量のチップをフラッシュする必要がある場合は、おそらくこのプロジェクトを自分で拡張することができます。 :)
私のコードには、コンパイル時に有効にして構成できるデータ書き込みおよびクリアチップ関数のチェックメカニズムも含めました。
Macro WRITE_CHKデフォルトで0として定義されますが、チェックを有効にするために1に変更できます。この場合、メモリに書き込まれたデータのすべてのバイトが自動的にチェックされ、ソフトウェアが予想データとは異なる場合、ソフトウェアがエラーを引き起こします。詳細については、コード内の関数writeMem()を参照してください。
マクロCLR_CHKはデフォルトで0として定義されますが、チェックを有効にするために正の数値に変更できます。この場合、クリアチップコマンドの後、マクロに割り当てられた数値は、フラッシュから読み取り、チェックされたランダムバイトの数になります。これらのバイトのいずれかが0xFF (クリアチップ後のデフォルト値)とは異なる場合、ソフトウェアはエラーを引き起こします。 CLR_CHK_MAXと呼ばれる別のマクロがあり、ランダム関数から可能な最高のアドレスを定義します。デフォルトでは、 131071 、(2^17)-1である131071と定義されます。SST39SF010で最もアドレス指定可能なバイトです。ただし、場合によってはフラッシュメモリは少数の最初のバイトに対してのみ使用されるため、このマクロを構成する可能性を提供したかったため、前の書き込みサイクルで使用されたバイトのみを確認すると便利です。詳細については、コード内の関数eraseAll()を参照してください。