minor
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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 - указатель на переменную содержащию значение таймаута
|
||||
|
||||
Reference in New Issue
Block a user