From 8fd8c031191334ae02ffbe306188db23a7964bb2 Mon Sep 17 00:00:00 2001 From: alexey Date: Tue, 13 Aug 2024 16:01:45 +0300 Subject: [PATCH] minor --- memory_spi/memory_spi.c | 34 ++++++++++------------------------ memory_spi/memory_spi.h | 8 ++++++-- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/memory_spi/memory_spi.c b/memory_spi/memory_spi.c index baaa922..e5111e8 100644 --- a/memory_spi/memory_spi.c +++ b/memory_spi/memory_spi.c @@ -9,14 +9,14 @@ - MEMSPI_FLASH_Erase Очистка внешней FLASH @func initialization - - MEMSPI_Base_Init Инициализация SPI и GPIO для FLASH + - MEMSPI_Base_Init Инициализация SPI и GPIO для внешней памяти @func service - MEMSPI_EEPROM_Write_Page Запись страницы в EEPROM *есть более общая функция MEMSPI_EEPROM_Write, которая записывает участки больше страницы - MEMSPI_FLASH_Erase_Sector Очистка сектора FLASH. *есть более общая функция MEMSPI_FLASH_Erase, которая может ощичать несколько секторов - MEMSPI_FLASH_Program_Page Программирование страницы. *есть более общая функция MEMSPI_FLASH_Program, которая программирует участки больше страницы - MEMSPI_WriteEnablingUntilTimeout Разрешение записи, пока не будет ответа или не истек таймаут - - MEMSPI_WaitOnFlagUntilTimeout Ожидание флага пока не истек таймаута + - MEMSPI_WaitOnFlagsUntilTimeout Ожидание флага пока не истек таймаута @func cmd functions - MEMSPI_CMD_Read_Status_Register Отправка комманд Read Status Register / Read Status Register 2 (0x05h / 0x35h) @@ -31,9 +31,6 @@ - MEMSPI_CMD_Read_JEDEC_ID Отправка комманды Read JEDEC ID (0x4Bh) - MEMSPI_CMD_Read_Device_ID Отправка комманды Read Manufacture / Device Id (0x90) -@func SPI functions - - SPI_RES = MEMSPI_SPI_Transmit Функция отправки по SPI (содержит только HAL_SPI_Transmit) - - SPI_RES = MEMSPI_SPI_Receive Функция приема по SPI (содержит только HAL_SPI_Receive) ***************************************************************************/ #include "memory_spi.h" @@ -124,7 +121,7 @@ HAL_StatusTypeDef MEMSPI_Read_Memory(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLA uint32_t tickstart = HAL_GetTick(); // wait for unbusy - if(MEMSPI_WaitOnFlagUntilTimeout(hmemspi, MEMSPI_SR_BUSY, 0, &Timeout, &tickstart) != HAL_OK) // if its unbusy for timeout + if(MEMSPI_WaitOnFlagsUntilTimeout(hmemspi, MEMSPI_SR_BUSY, 0, &Timeout, &tickstart) != HAL_OK) // if its unbusy for timeout return HAL_TIMEOUT; // return timeout error MEMSPI_Status = MEMSPI_CMD_Read_Data(hmemspi, FLASH_Address, pBuff, Size, Timeout); @@ -201,10 +198,6 @@ HAL_StatusTypeDef MEMSPI_FLASH_Write(MEMSPI_HandleTypeDef *hmemspi, MEMSPI_Write uint8_t *writebuff = WriteInit->pDataPtr; HAL_StatusTypeDef MEMSPI_Status; - // WAIT FOR UNBUSY - if(MEMSPI_WaitOnFlagUntilTimeout(hmemspi, MEMSPI_SR_BUSY, 0, &Timeout, &tickstart) != HAL_OK) // if its unbusy for timeout - return HAL_TIMEOUT; // return timeout error - // ERASE FLASH MEMSPI_Status = MEMSPI_FLASH_Erase(hmemspi, WriteInit->Sector_Address, WriteInit->Sector_Size, Timeout, 0); if(MEMSPI_Status != HAL_OK) // note: no need waiting for end: the next call will wait for unbusy @@ -360,7 +353,7 @@ HAL_StatusTypeDef MEMSPI_EEPROM_Write_Page(MEMSPI_HandleTypeDef *hmemspi, uint32 // waiting for ending of writting if need if(WaitForEnd) - if(MEMSPI_WaitOnFlagUntilTimeout(hmemspi, MEMSPI_SR_WEL|MEMSPI_SR_BUSY, 0, Timeout, tickstart) != HAL_OK) // if writting isnt done (MEMSPI busy and WEL bit isnt in reset state) + if(MEMSPI_WaitOnFlagsUntilTimeout(hmemspi, MEMSPI_SR_WEL|MEMSPI_SR_BUSY, 0, Timeout, tickstart) != HAL_OK) // if writting isnt done (MEMSPI busy and WEL bit isnt in reset state) return HAL_TIMEOUT; // update handle variables @@ -394,7 +387,7 @@ HAL_StatusTypeDef MEMSPI_FLASH_Erase_Sector(MEMSPI_HandleTypeDef *hmemspi, uint3 // waiting for ending of erasing if need if(WaitForEnd) - if(MEMSPI_WaitOnFlagUntilTimeout(hmemspi, MEMSPI_SR_WEL|MEMSPI_SR_BUSY, 0, Timeout, tickstart) != HAL_OK) // if erase isnt done (MEMSPI busy and WEL bit isnt in reset state) + if(MEMSPI_WaitOnFlagsUntilTimeout(hmemspi, MEMSPI_SR_WEL|MEMSPI_SR_BUSY, 0, Timeout, tickstart) != HAL_OK) // if erase isnt done (MEMSPI busy and WEL bit isnt in reset state) return HAL_TIMEOUT; // return timeout because erasing instruction accepted, but arent done // note: if timeout == 0, erasing wouldnt be checking for ending (check busy flag) @@ -432,7 +425,7 @@ HAL_StatusTypeDef MEMSPI_FLASH_Program_Page(MEMSPI_HandleTypeDef *hmemspi, uint3 // waiting for ending of writting if need if(WaitForEnd) - if(MEMSPI_WaitOnFlagUntilTimeout(hmemspi, MEMSPI_SR_WEL|MEMSPI_SR_BUSY, 0, Timeout, tickstart) != HAL_OK) // if writting isnt done (MEMSPI busy and WEL bit isnt in reset state) + if(MEMSPI_WaitOnFlagsUntilTimeout(hmemspi, MEMSPI_SR_WEL|MEMSPI_SR_BUSY, 0, Timeout, tickstart) != HAL_OK) // if writting isnt done (MEMSPI busy and WEL bit isnt in reset state) return HAL_TIMEOUT; // update handle variables @@ -455,7 +448,7 @@ HAL_StatusTypeDef MEMSPI_WriteEnablingUntilTimeout(MEMSPI_HandleTypeDef *hmemspi HAL_StatusTypeDef MEMSPI_Status; // wait for unbusy - if(MEMSPI_WaitOnFlagUntilTimeout(hmemspi, MEMSPI_SR_BUSY, 0, Timeout, tickstart) != HAL_OK) // if its unbusy for timeout + if(MEMSPI_WaitOnFlagsUntilTimeout(hmemspi, MEMSPI_SR_BUSY, 0, Timeout, tickstart) != HAL_OK) // if its unbusy for timeout return HAL_TIMEOUT; // enable writing @@ -494,7 +487,7 @@ HAL_StatusTypeDef MEMSPI_WriteEnablingUntilTimeout(MEMSPI_HandleTypeDef *hmemspi * @return HAL status. * @note Считывает флаги до тех пор, пока они не будут в состоянии FlagStatus или до тех пор, пока таймаут не истечет. */ -HAL_StatusTypeDef MEMSPI_WaitOnFlagUntilTimeout(MEMSPI_HandleTypeDef *hmemspi, uint16_t FlagMask, uint16_t FlagStatus, uint32_t *Timeout, uint32_t *tickstart) +HAL_StatusTypeDef MEMSPI_WaitOnFlagsUntilTimeout(MEMSPI_HandleTypeDef *hmemspi, uint16_t FlagMask, uint16_t FlagStatus, uint32_t *Timeout, uint32_t *tickstart) { HAL_StatusTypeDef MEMSPI_Status; // check flags @@ -553,9 +546,9 @@ HAL_StatusTypeDef MEMSPI_CMD_Read_Status_Register(MEMSPI_HandleTypeDef *hmemspi, uint8_t *pSRPtr = 0; uint8_t size = 1; -#ifdef MEMSPI_READ_STATUS_REG_2 if(RequestedBits >> 8) // if its high byte of status register { +#ifdef MEMSPI_READ_STATUS_REG_2 command[0] = MEMSPI_READ_STATUS_REG_2; pSRPtr = (uint8_t *)(&hmemspi->SR) + 1; // set pointer to HI byte of SR register size = 1; @@ -564,6 +557,7 @@ HAL_StatusTypeDef MEMSPI_CMD_Read_Status_Register(MEMSPI_HandleTypeDef *hmemspi, size = 2; // set size to 2 bytes command[1] = MEMSPI_READ_STATUS_REG; } +#endif // MEMSPI_READ_STATUS_REG_2 } else // of its low byte of status register { @@ -582,14 +576,6 @@ HAL_StatusTypeDef MEMSPI_CMD_Read_Status_Register(MEMSPI_HandleTypeDef *hmemspi, SPI_RES = MEMSPI_SPI_Receive(hmemspi, pSRPtr-1, 1, Timeout); // receive response MEMSPI_Deselect(hmemspi); } -#else - command[0] = MEMSPI_READ_STATUS_REG; - pSRPtr = (uint8_t *)(&hmemspi->SR); // set pointer to HI byte of SR register - - MEMSPI_Select(hmemspi); - SPI_RES = MEMSPI_SPI_Transmit(hmemspi, command, 1, Timeout); // send insctruction to read SR - SPI_RES = MEMSPI_SPI_Receive(hmemspi, pSRPtr, 1, Timeout); // receive response -#endif if(EndCMD) MEMSPI_Deselect(hmemspi); return SPI_RES; diff --git a/memory_spi/memory_spi.h b/memory_spi/memory_spi.h index c27fbc9..dd3df35 100644 --- a/memory_spi/memory_spi.h +++ b/memory_spi/memory_spi.h @@ -69,11 +69,12 @@ */ #define MEMSPI_Get_Flag(_hmemspi_,_flag_) (((MEMSPI_StatusRegisterTypeDef)(_hmemspi_->SR))._flag_) +// FLASH SR #define MEMSPI_SR_SUS (1<<15) #define MEMSPI_SR_QE (1<<9) #define MEMSPI_SR_SRP1 (1<<8) #define MEMSPI_SR_SRP0 (1<<7) -#define MEMSPI_SR_SEC (1<<8) +#define MEMSPI_SR_SEC (1<<6) #define MEMSPI_SR_TB (1<<5) #define MEMSPI_SR_BP2 (1<<4) #define MEMSPI_SR_BP1 (1<<3) @@ -81,6 +82,9 @@ #define MEMSPI_SR_WEL (1<<1) #define MEMSPI_SR_BUSY (1<<0) +// Exclusive (only by name) EEPROM SR bits +#define MEMSPI_SR_SRWD MEMSPI_SR_SRP0 +#define MEMSPI_SR_WIP MEMSPI_SR_WEL /** * @brief Calc dividing including remainder (divide and ceil) * @param _val_ - делимое. @@ -270,7 +274,7 @@ HAL_StatusTypeDef MEMSPI_WriteEnablingUntilTimeout(MEMSPI_HandleTypeDef *hmemspi * @return HAL status. * @note Считывает флаги до тех пор, пока они не будут в состоянии FlagStatus или до тех пор, пока таймаут не истечет. */ -HAL_StatusTypeDef MEMSPI_WaitOnFlagUntilTimeout(MEMSPI_HandleTypeDef *hmemspi, uint16_t FlagMask, uint16_t FlagStatus, uint32_t *Timeout, uint32_t *tickstart); +HAL_StatusTypeDef MEMSPI_WaitOnFlagsUntilTimeout(MEMSPI_HandleTypeDef *hmemspi, uint16_t FlagMask, uint16_t FlagStatus, uint32_t *Timeout, uint32_t *tickstart); /** * @brief Update Timeout variables. * @param Timeout - указатель на переменную содержащию значение таймаута