- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
添付回路図のように基板を修正出来上がってきた基板でUSB BOOTで立ちあげて
Control Centerで書き込みをして、「Programming of SPI FLASH Succeeded」に確認して
基板をSPI BOOTにSWを変更して立ちあげても カメラの認識せず、USB BOOTLOADERで上がってきます。
SPIの状況を見ると、立ち上がり時にSPIの動作をしているのですが、少しで止まってしまっています。
デジアナでログを取りましたので添付します。
ROMを1個商社から聞いた実績のあるS25FS128SAに変えてみましたが状況は変わりません。
書き込んでいるイメージファイルを添付します。
以上、宜しくお願いします。
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
書込みのログを見直しました。
Time
,Packet ID,MOSI,MISO8.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 です。確認してください。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
「SPI_読込 1.txt」で SPI バスの状態を確認すると
Time
,Packet ID,MOSI,MISO0.000003560,0,0x0500,0x001C
RDSR (05) に対して 1C が返ってきているので、 Flash が返答しているのだろうと推測されます。
Time
,Packet ID,MOSI,MISO0.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,MISO0.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 が含まれています。
つまり、電源投入直後のすべてのブロックが保護された状態だったので、消去・書込みができなかったものと推測されます。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
回答ありがとうございます。
ブロックを解除するにはどうしたらいいでしょうか?
SPIのコマンドはCYUSB3014が流しています。
Wiite ProtectしないようにプロテクトピンはHiにしています
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
SST25VF016B の場合、電源投入後は必ず保護されてしまうので、 FX3 の RAM 上のプログラムで BPx を書き換えておいて、電源を落とさないようにして Control Center から SPI Flash に書き込みを行うという方法が考えられます。
S25FS128S の場合、 BPx を Non-Volatile にすることができます。
そのため、あらかじめレジスタを初期設定するだけで使えるようになります。
ただ、これらの記述によると、 S25FS128S の出荷時には Non-Volatile 状態で初期値が BPx=000 という保護されない状態になっているようなので、別のプログラムできない理由があるかもしれません。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
回答ありがとうございます。
1枚の基板に3個のCYUSB3014と3個のSPI FLSASH ROM が載って今sう。
S25FS128Sは変えた1個だけで、残りはSST25VF016Bが載っています。
またSST25VF016Bが3個載った基板が全部で7枚ありますので、全て
ICを交換するのは難しいです。
FX3 の RAM 上のプログラムで BPx を書き換えておいて、電源を落とさないようにして
Control Center から SPI Flash に書き込みを行うという方法は具体的にどのように
したらいいでしょうか?
以上、宜しくお願いします。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
使用するのは、プロジェクト例 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 を書き換えるリクエストを追加していきます。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
お手数をおかけして申し訳ありません。
電源のセットアップシーケンスを修正し、S25FS128Sに変えた方で再度ログをとったところ
状況が変わりました。
デジアナのログをお送りします。
SPI BOOTで立ちあげてデータを読むようになったのですが、カメラとして認識せず
デバイスマネージャでシリアルのとこにはなくなっているおですが、カメラのところには
RAMに書き込んだ時はFX3と表示されるのですが、SPI BOOTで立ちあげると何も
出てきません。
以上、宜しくお願いします。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
READ ログを読みましたが、ちゃんと最後まで読み込まれています。
あとは、アプリケーションの問題です。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
最後まで読み込まれているのにデバイスマネージャで何も表示されない原因はなんでしょうか?
2台のPCでテストしても同状況です。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
GPIF II も I2C も SPI も使わないプロジェクト例、たとえば USBBulkSourceSink (cyfxbulksrcsink) などを SPI Flash に書き込んで、同様にデバイスマネージャに認識されないかどうかを確認してください。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
書込みのログを見直しました。
Time
,Packet ID,MOSI,MISO8.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 です。確認してください。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
すぐに買えそうなFLASHがON SemiのLE25U40Cしか見つかりません。
LE25U40Cは使用可能でしょうか?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
BPx だけ調べたところ、 Non-Volatile でしたので、使えるはずです。
ただし、工場出荷状態の値が見当たらなかったため、最初に保護を外すプログラムを走らせる必要があるかもしれません。