概要
STM32L152xCでの、Internal Flashの書き込み・消去のメモ
-
参考:
- RM0038 リファレンスマニュアル / Reference manual
STM32L100xx, STM32L151xx, STM32L152xx and STM32L162xx
advanced ARM®-based 32-bit MCUs の
Section 3: Flash program memory and data EEPROM / セクション 3 :フラッシュプログラムメモリとデータ EEPROM - STM32Cube_FW_L1 のサンプルコード
- (リンク先が変わったりするので、STのページから検索するのがいいと思う)
- RM0038 リファレンスマニュアル / Reference manual
メモ
STM32L1: Flashメモリの構成
- 4KB / Sector
- 256 Bytes / Page (=> 16 Pages / Sector)
- Page毎にErase
- Sector毎にWrite Protection
- チップごとの詳細は、RM0038リファレンスマニュアルを参照
アンロックとロック
- 書き込み・消去前に
HAL_FLASH_Unlock()
、 後に、HAL_FLASH_Lock()
するHAL_StatusTypeDef HAL_FLASH_Unlock(void)
HAL_StatusTypeDef HAL_FLASH_Lock(void)
消去
HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError)
-
コード
FLASH_EraseInitTypeDef EraseInitStruct; uint32_t PAGEError; ... EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; EraseInitStruct.PageAddress = 消去するページの先頭アドレス ; EraseInitStruct.NbPages = 消去するページ数 ; if (HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError) != HAL_OK) { // (PAGEError != 0xFFFFFFFFU) なら、PAGEError に消去でエラーの発生したアドレスが入っている }
書き込み
- ワード(4bytes)書き込み
HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint32_t Data)
ハーフページ書き込み
HAL_StatusTypeDef HAL_FLASHEx_HalfPageProgram(uint32_t Address, uint32_t* pBuffer)
-
コード
uint32_t Address, Data; Address = 書き込みアドレス (Address%4 == 0 じゃないとだめだと思う) Data = 書き込むデータ if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, data) == HAL_OK) { // エラー }
エラーの詳細を得る
uint32_t HAL_FLASH_GetError(void);
#define HAL_FLASH_ERROR_NONE 0x00U /*!< No error */
#define HAL_FLASH_ERROR_PGA 0x01U /*!< Programming alignment error */
#define HAL_FLASH_ERROR_WRP 0x02U /*!< Write protection error */
#define HAL_FLASH_ERROR_OPTV 0x04U /*!< Option validity error */
#define HAL_FLASH_ERROR_SIZE 0x08U /*!< */
#define HAL_FLASH_ERROR_RD 0x10U /*!< Read protected error */
#define HAL_FLASH_ERROR_OPTVUSR 0x20U /*!< Option UserValidity Error. */
#define HAL_FLASH_ERROR_OPERATION 0x40U /*!< Not used */
その他
- (TODO) 消去・書き込み速度などを測定する
- ハーフページ書き込みは、未テスト. 確認後更新する(予定)
- 外付け SPI-Flashの代わりに使えるかな??