SPI BOOT2

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
user_3987996
Level 3
Level 3
25 replies posted 10 replies posted 5 replies posted

添付回路図のように基板を修正出来上がってきた基板でUSB BOOTで立ちあげて

Control Centerで書き込みをして、Programming of SPI FLASH Succeeded」に確認して

基板をSPI BOOTにSWを変更して立ちあげても カメラの認識せず、USB BOOTLOADERで上がってきます。

SPIの状況を見ると、立ち上がり時にSPIの動作をしているのですが、少しで止まってしまっています。

デジアナでログを取りましたので添付します。

ROMを1個商社から聞いた実績のあるS25FS128SAに変えてみましたが状況は変わりません。

書き込んでいるイメージファイルを添付します。

以上、宜しくお願いします。

0 Likes
1 Solution

書込みのログを見直しました。

Time ,Packet ID,MOSI,MISO

8.831546280,17,0x0500,0x0002

9.847382880,19,0x0500,0x0002

9.847407400,20,0x0200,0x0000

9.847409760,20,0x0000,0x0000

9.847433160,20,0x4359,0x0000

9.847435160,20,0x00B0,0x0000  ←  0x1CB0

9.847437160,20,0x0001,0x0000  ←  0x4A09

9.847439160,20,0x0000,0x0000

9.847441160,20,0x0001,0x0000

9.847443160,20,0x0000,0x0000

9.847445160,20,0x1040,0x0000

9.847447160,20,0x2DE9,0x0000

9.847449160,20,0x1200,0x0000

9.847451160,20,0xA0E3,0x0000

書き込もうとしている値が間違っていました。これは、最初の SST25VF016B の書き込みログの時から間違っています。

この部分に誤りがあると、すべての値を読み込んだ後、チェックサムを照合した時に誤りが検出され、ROMをすべて読み込んだのに Bootloader が呼び出されるという現象を発生します。

誤った値が MOSI に載った原因ですが、一番に考えられるのはSCKのクロック周波数にバスが耐えられなかったのではないかという事です。もし、これが原因であれば、書き込み時のSCKは遅い周波数に設定されていると考えられるので、バスを軽くするよりありません。もし可能であれば、オシロスコープで最初の部分のMOSI波形を観測して、規定通りの電圧が出ているかを確認してください。もしかしたら、ロジックアナライザを接続した事により負荷が増加したことが原因である可能性もあります。

もう一つ考えられるのは、バスに別のデバイスが接続されている可能性です。回路図上には見当たらないので、実物を確認してください。

回路図を見直したところ、 SPI Flash の電源には、 3.3V が供給されていました。 SST25VF016B は、これでも良いのですが、 S25FS128S の電源電圧は 1.8V です。確認してください。

View solution in original post

0 Likes
15 Replies
NoriTan
Employee
Employee
25 sign-ins 5 questions asked 10 sign-ins

「SPI_読込 1.txt」で SPI バスの状態を確認すると

Time ,Packet ID,MOSI,MISO

0.000003560,0,0x0500,0x001C

RDSR (05) に対して 1C が返ってきているので、 Flash が返答しているのだろうと推測されます。

Time ,Packet ID,MOSI,MISO

0.000035680,4,0x0300,0xC200

0.000040240,4,0x0000,0x0000

0.000044960,4,0x0000,0xFFFF

0.000046600,4,0x0000,0xFFFF

0.000048280,4,0x0000,0xFFFF

ところが、続く READ (03) に対しては、 FF が返ってきました。これは、 Flash に値が書き込まれていない事を示します。

ここで、「SPI_書込 1.txt」に立ち返ってみますと、

Time ,Packet ID,MOSI,MISO

0.000014880,0,0xD800,0x0000

0.000017240,0,0x0000,0x0000

0.000134400,2,0x0500,0x001E

1.000787280,4,0xD801,0x0000

1.000789680,4,0x0000,0x0000

1.000925440,6,0x0500,0x001E

2.002375200,8,0xD802,0x0000

2.002377560,8,0x0000,0x0000

2.002543600,10,0x0500,0x001E

64kB Erase (D8) が三回発行されて 192kB の領域を消去しようとしているのが分かります。この時に RDSR(05) で返ってくる値は 1E です。ここには、 BP3,BP2,BP1,BP0=0111 が含まれています。

GS004357.png

つまり、電源投入直後のすべてのブロックが保護された状態だったので、消去・書込みができなかったものと推測されます。

0 Likes

回答ありがとうございます。

ブロックを解除するにはどうしたらいいでしょうか?

SPIのコマンドはCYUSB3014が流しています。

Wiite ProtectしないようにプロテクトピンはHiにしています

0 Likes

SST25VF016B の場合、電源投入後は必ず保護されてしまうので、 FX3 の RAM 上のプログラムで BPx を書き換えておいて、電源を落とさないようにして Control Center から SPI Flash に書き込みを行うという方法が考えられます。

S25FS128S の場合、 BPx を Non-Volatile にすることができます。

GS004359.png

そのため、あらかじめレジスタを初期設定するだけで使えるようになります。

ただ、これらの記述によると、 S25FS128S の出荷時には Non-Volatile 状態で初期値が BPx=000 という保護されない状態になっているようなので、別のプログラムできない理由があるかもしれません。

0 Likes

回答ありがとうございます。

1枚の基板に3個のCYUSB3014と3個のSPI FLSASH ROM が載って今sう。

S25FS128Sは変えた1個だけで、残りはSST25VF016Bが載っています。

またSST25VF016Bが3個載った基板が全部で7枚ありますので、全て

ICを交換するのは難しいです。

FX3 の RAM 上のプログラムで BPx を書き換えておいて、電源を落とさないようにして

Control Center から SPI Flash に書き込みを行うという方法は具体的にどのように

したらいいでしょうか?

以上、宜しくお願いします。

0 Likes

使用するのは、プロジェクト例 UsbSpiRegMode (cyfxusbspiregmode) です。

まず、本当に SPI Flash に書き込むことができないのか、確認してください。

   2. Write to SPI flash

      bmRequestType = 0x40

      bRequest      = 0xC2

      wValue        = 0x0000

      wIndex        = SPI flash page address (Each page is assumed to be of 256 bytes and the byte address is

                      computed by multiplying wIndex by 256)

      wLength       = Length of data to be written (Should be a multiple of 256 and less than or equal to 4096)

      Data phase should contain the actual data to be written

readme.txt に書いてある、このリクエストを control endpoint に送って、データを書き込み、

   5. Read from SPI flash

      bmRequestType = 0xC0

      bRequest      = 0xC3

      wValue        = 0x0000

      wIndex        = SPI flash page address (Each page is assumed to be of 256 bytes and the byte address is

                      computed by multiplying wIndex by 256)

      wLength       = Length of data to be read (Should be a multiple of 256 and less than or equal to 4096)

      Data phase will contain the data read from the flash device

このリクエストを送って、データが書き込めたかどうかを確認します。

適宜、 Erase リクエストも送ってみてください。

書き込めないことが確認出来たら、このプロジェクトに BPx を書き換えるリクエストを追加していきます。

0 Likes
lock attach
Attachments are accessible only for community members.

お手数をおかけして申し訳ありません。

電源のセットアップシーケンスを修正し、S25FS128Sに変えた方で再度ログをとったところ

状況が変わりました。

デジアナのログをお送りします。

SPI BOOTで立ちあげてデータを読むようになったのですが、カメラとして認識せず

デバイスマネージャでシリアルのとこにはなくなっているおですが、カメラのところには

RAMに書き込んだ時はFX3と表示されるのですが、SPI BOOTで立ちあげると何も

出てきません。

以上、宜しくお願いします。

0 Likes

READ ログを読みましたが、ちゃんと最後まで読み込まれています。

あとは、アプリケーションの問題です。

0 Likes

最後まで読み込まれているのにデバイスマネージャで何も表示されない原因はなんでしょうか?

2台のPCでテストしても同状況です。

0 Likes

GPIF II も I2C も SPI も使わないプロジェクト例、たとえば USBBulkSourceSink (cyfxbulksrcsink) などを SPI Flash に書き込んで、同様にデバイスマネージャに認識されないかどうかを確認してください。

0 Likes
lock attach
Attachments are accessible only for community members.

添付のイメージファイルを書き込んだ後にSPI BOOTで立ちあげても

USB BOOT Loaderで立ち上がってきます。

0 Likes
lock attach
Attachments are accessible only for community members.

cyfxbulksrcsnkのイメージファイルを書き込んだ時の

書込み及びSPI BOOT時のデジアナのログを添付します。

0 Likes
lock attach
Attachments are accessible only for community members.

cyfxbulksrcsinkの書き込み、読み込みの後元のイメージファイルを書き込む事を実行したのですが、

書込みは最後まで実行しているようですが、読み込みが途中で止まってしまいます。

ログを添付します。

何度かテストしましたが、状況が同じで同じところで止まってしまいます。

0 Likes

書込みのログを見直しました。

Time ,Packet ID,MOSI,MISO

8.831546280,17,0x0500,0x0002

9.847382880,19,0x0500,0x0002

9.847407400,20,0x0200,0x0000

9.847409760,20,0x0000,0x0000

9.847433160,20,0x4359,0x0000

9.847435160,20,0x00B0,0x0000  ←  0x1CB0

9.847437160,20,0x0001,0x0000  ←  0x4A09

9.847439160,20,0x0000,0x0000

9.847441160,20,0x0001,0x0000

9.847443160,20,0x0000,0x0000

9.847445160,20,0x1040,0x0000

9.847447160,20,0x2DE9,0x0000

9.847449160,20,0x1200,0x0000

9.847451160,20,0xA0E3,0x0000

書き込もうとしている値が間違っていました。これは、最初の SST25VF016B の書き込みログの時から間違っています。

この部分に誤りがあると、すべての値を読み込んだ後、チェックサムを照合した時に誤りが検出され、ROMをすべて読み込んだのに Bootloader が呼び出されるという現象を発生します。

誤った値が MOSI に載った原因ですが、一番に考えられるのはSCKのクロック周波数にバスが耐えられなかったのではないかという事です。もし、これが原因であれば、書き込み時のSCKは遅い周波数に設定されていると考えられるので、バスを軽くするよりありません。もし可能であれば、オシロスコープで最初の部分のMOSI波形を観測して、規定通りの電圧が出ているかを確認してください。もしかしたら、ロジックアナライザを接続した事により負荷が増加したことが原因である可能性もあります。

もう一つ考えられるのは、バスに別のデバイスが接続されている可能性です。回路図上には見当たらないので、実物を確認してください。

回路図を見直したところ、 SPI Flash の電源には、 3.3V が供給されていました。 SST25VF016B は、これでも良いのですが、 S25FS128S の電源電圧は 1.8V です。確認してください。

0 Likes

すぐに買えそうなFLASHがON SemiのLE25U40Cしか見つかりません。

LE25U40Cは使用可能でしょうか?

0 Likes

BPx だけ調べたところ、 Non-Volatile でしたので、使えるはずです。

GS004363.png

ただし、工場出荷状態の値が見当たらなかったため、最初に保護を外すプログラムを走らせる必要があるかもしれません。

0 Likes