2024年06月06日

GreenPAKで遊ぶ(その4)セルフリセット

 前回の記事に続き、GreenPAK Designer での設計習熟度の向上のため、習作として何かを設計してみたいと思います。ありふれたお題では詰まらないので奇抜な課題を考えてみました。で思い付いたのが次の課題です。なかなか突飛で面白そうな課題でしょ?


1.今回の課題
 SLG46826 は I2C インターフェースを使って動作を制御できます。そこで自分自身を制御してみましょう。具体的には I2C インターフェースのマスタになって自分自身にリセットコマンドを送付します。Z80 のマシン語等での自己書換えのように 46826 が自身のコンフィグを書き換えられたら新たな制御法が可能になるかもしれませんね。
 下図に「GreenPAKで遊ぶ(その2)書き込み環境完成」の記事に記載したソフトリセットコマンド発行時のロジアナ波形を再掲します。ソフトリセットを実行するためには C8H レジスタ(以降、リセットレジスタと記す)に 02H を書き込みます。

ソフトリセット開始時のロジアナ波形例

 但し、次の条件を付けます。
  • I2C のアドレスは 00H 固定とする。
  • I2C マスタ側の SCL と SDA はそれぞれ IO13 と IO14 に割り振り、10k でプルアップしたオープンドレイン出力とする。
  • 受信側が ACK 応答するタイミングでの SDA は high 出力とする。
  • リセットビットは 02H ですが LSB が未使用(予約ビット)なのでリセットレジスタへの出力は 03H でも可とする。

2.概要設計
 SLG46825 の内蔵の機能要素による回路設計は結構時間が掛かります。機能要素の一覧を眺めながら概要としては次のように考えました。
  • ディレー要素
     POR から一定時間待つのに1個、I2C のクロック生成用に1個の最低2個は必要

  • ワンショット要素
     I2C アドレス送出用に1個、リセットレジスタ設定用に1個の最低2個は必要

  • リセットレジスタ設定用パターン
     ここは PGEN(Pattern Generator) を使いたい局面です。しかし、ACK 受信用ビットを加えると18ビットのパターンが必要(I2C アドレスに対する ACK ビットも加えると19ビット)になりますが、PGEN は最大16ビット長です。そこで I2C アドレスに対する ACK ビットと リセットレジスタアドレス(C8H)の先頭の2ビットの合計で3ビット分の high ビットパターンをサイクリックに使用する(出力データの03Hの最後の2ビット+ ACK ビットの3ビット分に流用)ことにします。

  • I2C セッションの終了
     I2C 通信のセッション終了(SCL を high 状態にして SDA 立ち上がりエッジを生成)のためにワンショットや D-FF が必要になりそうですが実際に回路を組み立てながら考えることにします。

3.回路設計
 設計した回路が下図になります。中々コンパクトにまとめられたのではないでしょうか? コンビネーション機能要素はまだ半数以上未使用の状態です^^

I2C でリセット送信する回路

 上記の概要設計でのワンショット関連のシミュレーション結果が下図になります。最後の2つは I2C セッションの終了を生成するためのものです。

シミュレーション結果1

 I2C の SCL と SDA のパターンを生成している部分のシミュレーション結果が下図になります。上から3つ目の PGEN ->OUT が PGEN の出力で概要設計で書いたように3ビット長の high 部分を2回使用しています。

シミュレーション結果2

4.ロジアナでの確認結果
 生成した I2C 波形をロジアナで確認した結果が下図になります。下半分が上記の回路で生成した波形です。想定通りの波形になっていますね。まだ SLG46826 の I2C 入力ピン(下図の上半分)には繋いでいないので ACK 応答が無いために NAK 状態になっています。

生成した I2C マスタ波形

 生成した波形を I2C 入力ピンに接続後のロジアナ波形が下図になります。GreenSCL と GreenSDA の内部の 10k でのプルアップでは弱かったので外部に 4.7k のプルアップ抵抗を追加しました。ACK 部に若干ひげが発生していますが、自身で生成した I2C 信号に対して自身で ACK 応答しているので上の図での NAK 部分が ACK に変化しています。


I2C 入力ピンに接続後の波形

 下図は 電源投入後に繰り返されるソフトリセットコマンドのロジアナ波形です。ソフトリセットの実行には 2ms 程度の時間が掛かっているようです。

ソフトリセット波形

 今回設計した I2C マスタ機能で送信したソフトリセット命令により実際にリセットが掛かっていることが確認できたので、今回の課題は達成できたと言えますね^^


★追記 2024/06/06
 早速ですが PGEN の nRESET 入力を活用することで LUT1 を省略することができました。

I2C でリセット送信する回路(改善版)



[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]
posted by skyriver at 17:52| Comment(0) | GreenPAK | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください