Advertisement
sniper_nuko

SPI_Flash_Memory

Nov 4th, 2020
848
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.09 KB | None | 0 0
  1. //フラッシュメモリコマンド Flash Memory M25P16-VMN6T
  2. #define FCMD_EN_WR      (0x06)      // 書き込み許可有効コマンド
  3. #define FCMD_DI_WR      (0x04)      // 書き込み許可無効コマンド
  4. #define FCMD_RD_ID      (0x9F)      // デバイス識別読み出しコマンド
  5. #define FCMD_RD_SR      (0x05)      // ステータスレジスタ読み出しコマンド
  6. #define FCMD_WR_SR      (0x01)      // ステータスレジスタ書き込みコマンド
  7. #define FCMD_RD_BYTE    (0x03)      // 読み出しコマンド
  8. #define FCMD_RD_FAST    (0x0B)      // 高速読み出しコマンド
  9. #define FCMD_PP         (0x02)      // ページプログラム(書き込み)コマンド
  10. #define FCMD_SE         (0xD8)      // セクタ消去コマンド
  11. #define FCMD_BE         (0xC7)      // 一括消去コマンド
  12. #define FCMD_DP         (0xB9)      // ディープパワーダウンコマンド
  13. #define FCMD_RES        (0xAB)      // ディープパワーダウン解除コマンド
  14. #define FCMD_STAT_WIP   (0x01u)     // ステータスレジスタ書き込み中ビット
  15.  
  16. // フラッシュメモリ
  17. #define ERR_WR_RD       (0x1)       // 書き込み前読み出し失敗    0000 0001
  18. #define ERR_SE          (0x2)       // セクター消去失敗         0000 0010
  19. #define ERR_WR          (0x4)       // 書き込み失敗               0000 0100
  20. #define ERR_RD          (0x8)       // 起動時読み出し失敗      0000 1000
  21. #define SAME_DATA       (0x80)      // 受信,記憶済みデータ同一   1000 0000
  22.  
  23. // フラッシュメモリアドレス
  24. #define FLS_ADDR        (0x1E0000)  // セクター30
  25. #define WR_ADDR         (0x1E0003)
  26. #define RD_ADDR         (0x1E0003)
  27.  
  28. // フラッシュメモリに書き込み許可コマンド転送
  29. static void spi_flash_write_enable(void)
  30. {
  31.     // SPI通信開始
  32.     spi_flash_comm_start();
  33.     // 書き込み許可
  34.     spi_flash_transfer(FCMD_EN_WR);
  35.     // SPI通信終了
  36.     spi_flash_comm_end();
  37. }
  38.  
  39. // 書き込み終了まで待機
  40. static void spi_flash_wait_for_write(void)
  41. {
  42.     // SPI通信開始
  43.     spi_flash_comm_start();
  44.  
  45.     // コマンド送信
  46.     spi_flash_transfer(FCMD_RD_SR);
  47.  
  48.     // WIPビットが0になるまで待機
  49.     while((spi_flash_transfer(0) & FCMD_STAT_WIP) != 0) ssync();
  50.  
  51.     // SPI通信終了
  52.     spi_flash_comm_end();
  53. }
  54.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement