1 2 Previous Next 15 Replies Latest reply on Jul 19, 2019 6:01 AM by NoriakiT_91

    SPI BOOT2

    user_3987996

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

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

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

       

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

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

       

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

       

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

       

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

       

       

        • 1. Re: SPI BOOT2
          NoriakiT_91

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

           

          Time [s],Packet ID,MOSI,MISO
          0.000003560,0,0x0500,0x001C
          

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

           

          Time [s],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 [s],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

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

          • 2. Re: SPI BOOT2
            user_3987996

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

             

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

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

             

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

            • 3. Re: SPI BOOT2
              NoriakiT_91

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

               

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

              GS004359.png

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

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

              • 4. Re: SPI BOOT2
                user_3987996

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

                 

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

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

                 

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

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

                 

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

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

                したらいいでしょうか?

                 

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

                • 5. Re: SPI BOOT2
                  NoriakiT_91

                  使用するのは、プロジェクト例 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 を書き換えるリクエストを追加していきます。

                  • 6. Re: SPI BOOT2
                    user_3987996

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

                     

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

                    状況が変わりました。

                     

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

                     

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

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

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

                    出てきません。

                     

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

                    • 7. Re: SPI BOOT2
                      NoriakiT_91

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

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

                      • 8. Re: SPI BOOT2
                        user_3987996

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

                         

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

                        • 9. Re: SPI BOOT2
                          NoriakiT_91

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

                          • 10. Re: SPI BOOT2
                            user_3987996

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

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

                            • 11. Re: SPI BOOT2
                              user_3987996

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

                               

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

                              • 12. Re: SPI BOOT2
                                user_3987996

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

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

                                ログを添付します。

                                 

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

                                 

                                 

                                • 13. Re: SPI BOOT2
                                  NoriakiT_91

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

                                  Time [s],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 です。確認してください。

                                  • 14. Re: SPI BOOT2
                                    user_3987996

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

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

                                    1 2 Previous Next