- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
以前にも質問させていただきましたが、CUYSB3014のSPI接続のEEPROMにプログラムを書き込むときに
EEPROM側で書き込みロックがかかているものだと、CYPRESSの書き込みユーティリティでは書き込みが
できませんでしたが、CYUSB3014の元から入っているファームを書き換える等で書き込みロックがかかっている
EEPROMにユーティリティで書き込みができるようにする方法をお教え下さい。
解決済! 解決策の投稿を見る。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
以前の質問というのはこちらのスレッドのことでよろしいでしょうか?
やりたいこととしては、EEPROMにあるProtection機能をFX3 Firmwareから解除し、EZ-PD USB Control CenterからSPI EEPROMにFirmwareを書き込めるようにするということでよろしいでしょうか。
上記スレッドに重複することですが、S25FS128Sを参考にしてみますと、S25FS128Sデータシートの"7.6.3.1 Configuration Register 1 Non-Volatile (CR1NV)"において、BPNV_O(CR1NV[3])が初期設定(工場出荷時)でNon-Volatileになっています。そして、 BP_NV0/1/2は0に設定されており、ProgramまたはErase操作から保護されていない状態です。そのため、特に議論点はないかと存じます。
一方で、SST25VF016B(Microchip社製)では、デフォルトで各BPビットは1に設定されており、全てのブロックが保護されている状態にあります。
本データシートの"4.3.4 BLOCK PROTECTION (BP3,BP2, BP1, BP0)"にあるように、WP#がHighに設定されていれば、Write-Status-Register (WRSR)コマンドを使用して全てのBPを0に設定できます。
次に、WRSRを使うシーケンスは"4.4.14 WRITE-STATUS-REGISTER (WRSR)"と"FIGURE 4-17: ENABLE-WRITE-STATUS-REGISTER (EWSR) OR WRITE-ENABLE (WREN) AND WRITE-STATUS-REGISTER (WRSR) SEQUENCE"に示されております。
(SST25VF016Bの使い方詳細についてはMicrochip社へお問い合わせください。)
FX3でSPIコマンドを発行する方法は、サンプルファームウェアですとUsbSpiRegMode (cyfxusbspiregmode) または USBFlashProg (cyfxflashprog)辺りが参考になります。
これらのreadme.txtに書かれているように、以下の手順でSPI Writeが実行されます。
1. Erase the required sector: CY_FX_RQT_SPI_FLASH_ERASE_POLL with wValue
as 1 and length as 0.
2. Wait for erase to complete: CY_FX_RQT_SPI_FLASH_ERASE_POLL with wValue
as 0 and IN length as 1. Repeat this until the returned value has WIP zero.
3. Write data to page: CY_FX_RQT_SPI_FLASH_WRITE with correct parameters.
4. Wait for write to complete: CY_FX_RQT_SPI_FLASH_ERASE_POLL with wValue
as 0 and IN length as 1. Repeat this until the returned value has WIP zero.
よって、BPビットを変更するのは、このCY_FX_RQT_SPI_FLASH_ERASE_POLLが初めて実行される前に行えば良いと考えます。
UsbSpiRegModeファームウェアの場合、CyFxSpiEraseSectorという関数が定義されており、ここでSector Eraseが実施されています。
Sector Eraseの実施前に、BPビットを変更するためのコマンド(上記のFIGURE 4-17)を実装してみてください。
(2020/04/06 18:00時加筆修正)
よって、ProgramまたはErase操作を行う前に、BPビットを変更する必要があるわけですが、USB BOOTでFX3 RAM上にそのような動作を行うプログラムを書き込みます。BPビットの変更操作のプログラムではSPIコマンドを発行する必要があるわけですが、FX3でSPIコマンドを発行する方法は、サンプルファームウェアですとUsbSpiRegMode (cyfxusbspiregmode) または USBFlashProg (cyfxflashprog)辺りが参考になります。
これによって、BPビットを変更できますので、その後Control CenterからSPI Flashに書き込みたいプログラムを書き込みます。
Best regards,
Hirotaka Takayama
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
以前の質問というのはこちらのスレッドのことでよろしいでしょうか?
やりたいこととしては、EEPROMにあるProtection機能をFX3 Firmwareから解除し、EZ-PD USB Control CenterからSPI EEPROMにFirmwareを書き込めるようにするということでよろしいでしょうか。
上記スレッドに重複することですが、S25FS128Sを参考にしてみますと、S25FS128Sデータシートの"7.6.3.1 Configuration Register 1 Non-Volatile (CR1NV)"において、BPNV_O(CR1NV[3])が初期設定(工場出荷時)でNon-Volatileになっています。そして、 BP_NV0/1/2は0に設定されており、ProgramまたはErase操作から保護されていない状態です。そのため、特に議論点はないかと存じます。
一方で、SST25VF016B(Microchip社製)では、デフォルトで各BPビットは1に設定されており、全てのブロックが保護されている状態にあります。
本データシートの"4.3.4 BLOCK PROTECTION (BP3,BP2, BP1, BP0)"にあるように、WP#がHighに設定されていれば、Write-Status-Register (WRSR)コマンドを使用して全てのBPを0に設定できます。
次に、WRSRを使うシーケンスは"4.4.14 WRITE-STATUS-REGISTER (WRSR)"と"FIGURE 4-17: ENABLE-WRITE-STATUS-REGISTER (EWSR) OR WRITE-ENABLE (WREN) AND WRITE-STATUS-REGISTER (WRSR) SEQUENCE"に示されております。
(SST25VF016Bの使い方詳細についてはMicrochip社へお問い合わせください。)
FX3でSPIコマンドを発行する方法は、サンプルファームウェアですとUsbSpiRegMode (cyfxusbspiregmode) または USBFlashProg (cyfxflashprog)辺りが参考になります。
これらのreadme.txtに書かれているように、以下の手順でSPI Writeが実行されます。
1. Erase the required sector: CY_FX_RQT_SPI_FLASH_ERASE_POLL with wValue
as 1 and length as 0.
2. Wait for erase to complete: CY_FX_RQT_SPI_FLASH_ERASE_POLL with wValue
as 0 and IN length as 1. Repeat this until the returned value has WIP zero.
3. Write data to page: CY_FX_RQT_SPI_FLASH_WRITE with correct parameters.
4. Wait for write to complete: CY_FX_RQT_SPI_FLASH_ERASE_POLL with wValue
as 0 and IN length as 1. Repeat this until the returned value has WIP zero.
よって、BPビットを変更するのは、このCY_FX_RQT_SPI_FLASH_ERASE_POLLが初めて実行される前に行えば良いと考えます。
UsbSpiRegModeファームウェアの場合、CyFxSpiEraseSectorという関数が定義されており、ここでSector Eraseが実施されています。
Sector Eraseの実施前に、BPビットを変更するためのコマンド(上記のFIGURE 4-17)を実装してみてください。
(2020/04/06 18:00時加筆修正)
よって、ProgramまたはErase操作を行う前に、BPビットを変更する必要があるわけですが、USB BOOTでFX3 RAM上にそのような動作を行うプログラムを書き込みます。BPビットの変更操作のプログラムではSPIコマンドを発行する必要があるわけですが、FX3でSPIコマンドを発行する方法は、サンプルファームウェアですとUsbSpiRegMode (cyfxusbspiregmode) または USBFlashProg (cyfxflashprog)辺りが参考になります。
これによって、BPビットを変更できますので、その後Control CenterからSPI Flashに書き込みたいプログラムを書き込みます。
Best regards,
Hirotaka Takayama
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
回答ありがとうございます。
UsbSpiRegMode (cyfxusbspiregmode) または USBFlashProg (cyfxflashprog)辺りを参考にしてBPビットを変更するためのコマンドを
作り込んで、一度USB BOOTで作成したプログラムをEZ-PD USB Control Centerで書き込んで実行した後に、再度EZ-PD USB Control CenterでSPI BOOTするようにプログラムを書き込むという認識でいいでしょうか?
以上、宜しくお願いします。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
はい、面倒な動作かもしれませんが、その流れで行っていただくことを想定しています。
>> SST25VF016B の場合、電源投入後は必ず保護されてしまうので、 FX3 の RAM 上のプログラムで BPx を書き換えておいて、電源を落とさないようにして Control Center から SPI Flash に書き込みを行うという方法が考えられます。
上記の投稿にあるように、まずはUSB BOOTでBPxを書き換えるような動作をするプログラムを書き込み、その後Control CenterからSPI FlashにSPI BOOTするようにプログラムを書き込みます。
分かりやすくするために始めの回答に少し加筆しておきます。
Best regards,
Hirotaka Takayama