rom_poke()という関数はこれを呼べばメモリセルにそのデータが固定されるわけではなくROM内部の制御レジスタに書かれるだけです。本当のプログラムのためには一連のアドレス/データを次々に書き込むコマンドシーケンスを実行することになります。
たとえばチップ内全てのセルを消去するchip eraseは以下のように6バイトのシーケンスが必要です。さすがにどんなにプログラムが暴走してもこのパタンが誤って与えられることはないでしょう
chip eraseを実行する関数は以下のようになりました。
ところがこれが全く動作しません(手持ちのROM内容がオール00だったのでチップイレーズが機能するとオールFFになるはず)。programコマンドもやはりだめでどこか間違っているみたいです
ソフト的には問題なさそうなのでハードを少し追ってみました。PICがROMに与えているアドレスとデータバスですが、うちアドレスA0..A7はポートAのRA0..RA7に割り当てています。
RA6とRA7は外付け水晶の接続端子と多重化されていますが、ここは発振器のコンフィグレーションはINTOSCIOにしてあるのでデジタル出力として使えるはずです。これはセーフでしたが、さらによくよく見てみると・・
うわ・・やらかしてます
A6とA7の接続がテレコになっちゃってます(またまたこのパタン)
これでは所定のアドレスにコマンドが与えられないので実行されない訳です