minor
This commit is contained in:
@@ -9,14 +9,14 @@
|
|||||||
- MEMSPI_FLASH_Erase Очистка внешней FLASH
|
- MEMSPI_FLASH_Erase Очистка внешней FLASH
|
||||||
|
|
||||||
@func initialization
|
@func initialization
|
||||||
- MEMSPI_Base_Init Инициализация SPI и GPIO для FLASH
|
- MEMSPI_Base_Init Инициализация SPI и GPIO для внешней памяти
|
||||||
|
|
||||||
@func service
|
@func service
|
||||||
- MEMSPI_EEPROM_Write_Page Запись страницы в EEPROM *есть более общая функция MEMSPI_EEPROM_Write, которая записывает участки больше страницы
|
- MEMSPI_EEPROM_Write_Page Запись страницы в EEPROM *есть более общая функция MEMSPI_EEPROM_Write, которая записывает участки больше страницы
|
||||||
- MEMSPI_FLASH_Erase_Sector Очистка сектора FLASH. *есть более общая функция MEMSPI_FLASH_Erase, которая может ощичать несколько секторов
|
- MEMSPI_FLASH_Erase_Sector Очистка сектора FLASH. *есть более общая функция MEMSPI_FLASH_Erase, которая может ощичать несколько секторов
|
||||||
- MEMSPI_FLASH_Program_Page Программирование страницы. *есть более общая функция MEMSPI_FLASH_Program, которая программирует участки больше страницы
|
- MEMSPI_FLASH_Program_Page Программирование страницы. *есть более общая функция MEMSPI_FLASH_Program, которая программирует участки больше страницы
|
||||||
- MEMSPI_WriteEnablingUntilTimeout Разрешение записи, пока не будет ответа или не истек таймаут
|
- MEMSPI_WriteEnablingUntilTimeout Разрешение записи, пока не будет ответа или не истек таймаут
|
||||||
- MEMSPI_WaitOnFlagUntilTimeout Ожидание флага пока не истек таймаута
|
- MEMSPI_WaitOnFlagsUntilTimeout Ожидание флага пока не истек таймаута
|
||||||
|
|
||||||
@func cmd functions
|
@func cmd functions
|
||||||
- MEMSPI_CMD_Read_Status_Register Отправка комманд Read Status Register / Read Status Register 2 (0x05h / 0x35h)
|
- 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_JEDEC_ID Отправка комманды Read JEDEC ID (0x4Bh)
|
||||||
- MEMSPI_CMD_Read_Device_ID Отправка комманды Read Manufacture / Device Id (0x90)
|
- 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"
|
#include "memory_spi.h"
|
||||||
|
|
||||||
@@ -124,7 +121,7 @@ HAL_StatusTypeDef MEMSPI_Read_Memory(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLA
|
|||||||
uint32_t tickstart = HAL_GetTick();
|
uint32_t tickstart = HAL_GetTick();
|
||||||
|
|
||||||
// wait for unbusy
|
// 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
|
return HAL_TIMEOUT; // return timeout error
|
||||||
|
|
||||||
MEMSPI_Status = MEMSPI_CMD_Read_Data(hmemspi, FLASH_Address, pBuff, Size, Timeout);
|
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;
|
uint8_t *writebuff = WriteInit->pDataPtr;
|
||||||
HAL_StatusTypeDef MEMSPI_Status;
|
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
|
// ERASE FLASH
|
||||||
MEMSPI_Status = MEMSPI_FLASH_Erase(hmemspi, WriteInit->Sector_Address, WriteInit->Sector_Size, Timeout, 0);
|
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
|
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
|
// waiting for ending of writting if need
|
||||||
if(WaitForEnd)
|
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;
|
return HAL_TIMEOUT;
|
||||||
|
|
||||||
// update handle variables
|
// update handle variables
|
||||||
@@ -394,7 +387,7 @@ HAL_StatusTypeDef MEMSPI_FLASH_Erase_Sector(MEMSPI_HandleTypeDef *hmemspi, uint3
|
|||||||
|
|
||||||
// waiting for ending of erasing if need
|
// waiting for ending of erasing if need
|
||||||
if(WaitForEnd)
|
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
|
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)
|
// 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
|
// waiting for ending of writting if need
|
||||||
if(WaitForEnd)
|
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;
|
return HAL_TIMEOUT;
|
||||||
|
|
||||||
// update handle variables
|
// update handle variables
|
||||||
@@ -455,7 +448,7 @@ HAL_StatusTypeDef MEMSPI_WriteEnablingUntilTimeout(MEMSPI_HandleTypeDef *hmemspi
|
|||||||
HAL_StatusTypeDef MEMSPI_Status;
|
HAL_StatusTypeDef MEMSPI_Status;
|
||||||
|
|
||||||
// wait for unbusy
|
// 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 HAL_TIMEOUT;
|
||||||
|
|
||||||
// enable writing
|
// enable writing
|
||||||
@@ -494,7 +487,7 @@ HAL_StatusTypeDef MEMSPI_WriteEnablingUntilTimeout(MEMSPI_HandleTypeDef *hmemspi
|
|||||||
* @return HAL status.
|
* @return HAL status.
|
||||||
* @note Считывает флаги до тех пор, пока они не будут в состоянии FlagStatus или до тех пор, пока таймаут не истечет.
|
* @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;
|
HAL_StatusTypeDef MEMSPI_Status;
|
||||||
// check flags
|
// check flags
|
||||||
@@ -553,9 +546,9 @@ HAL_StatusTypeDef MEMSPI_CMD_Read_Status_Register(MEMSPI_HandleTypeDef *hmemspi,
|
|||||||
uint8_t *pSRPtr = 0;
|
uint8_t *pSRPtr = 0;
|
||||||
uint8_t size = 1;
|
uint8_t size = 1;
|
||||||
|
|
||||||
#ifdef MEMSPI_READ_STATUS_REG_2
|
|
||||||
if(RequestedBits >> 8) // if its high byte of status register
|
if(RequestedBits >> 8) // if its high byte of status register
|
||||||
{
|
{
|
||||||
|
#ifdef MEMSPI_READ_STATUS_REG_2
|
||||||
command[0] = 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
|
pSRPtr = (uint8_t *)(&hmemspi->SR) + 1; // set pointer to HI byte of SR register
|
||||||
size = 1;
|
size = 1;
|
||||||
@@ -564,6 +557,7 @@ HAL_StatusTypeDef MEMSPI_CMD_Read_Status_Register(MEMSPI_HandleTypeDef *hmemspi,
|
|||||||
size = 2; // set size to 2 bytes
|
size = 2; // set size to 2 bytes
|
||||||
command[1] = MEMSPI_READ_STATUS_REG;
|
command[1] = MEMSPI_READ_STATUS_REG;
|
||||||
}
|
}
|
||||||
|
#endif // MEMSPI_READ_STATUS_REG_2
|
||||||
}
|
}
|
||||||
else // of its low byte of status register
|
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
|
SPI_RES = MEMSPI_SPI_Receive(hmemspi, pSRPtr-1, 1, Timeout); // receive response
|
||||||
MEMSPI_Deselect(hmemspi);
|
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)
|
if(EndCMD)
|
||||||
MEMSPI_Deselect(hmemspi);
|
MEMSPI_Deselect(hmemspi);
|
||||||
return SPI_RES;
|
return SPI_RES;
|
||||||
|
|||||||
@@ -69,11 +69,12 @@
|
|||||||
*/
|
*/
|
||||||
#define MEMSPI_Get_Flag(_hmemspi_,_flag_) (((MEMSPI_StatusRegisterTypeDef)(_hmemspi_->SR))._flag_)
|
#define MEMSPI_Get_Flag(_hmemspi_,_flag_) (((MEMSPI_StatusRegisterTypeDef)(_hmemspi_->SR))._flag_)
|
||||||
|
|
||||||
|
// FLASH SR
|
||||||
#define MEMSPI_SR_SUS (1<<15)
|
#define MEMSPI_SR_SUS (1<<15)
|
||||||
#define MEMSPI_SR_QE (1<<9)
|
#define MEMSPI_SR_QE (1<<9)
|
||||||
#define MEMSPI_SR_SRP1 (1<<8)
|
#define MEMSPI_SR_SRP1 (1<<8)
|
||||||
#define MEMSPI_SR_SRP0 (1<<7)
|
#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_TB (1<<5)
|
||||||
#define MEMSPI_SR_BP2 (1<<4)
|
#define MEMSPI_SR_BP2 (1<<4)
|
||||||
#define MEMSPI_SR_BP1 (1<<3)
|
#define MEMSPI_SR_BP1 (1<<3)
|
||||||
@@ -81,6 +82,9 @@
|
|||||||
#define MEMSPI_SR_WEL (1<<1)
|
#define MEMSPI_SR_WEL (1<<1)
|
||||||
#define MEMSPI_SR_BUSY (1<<0)
|
#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)
|
* @brief Calc dividing including remainder (divide and ceil)
|
||||||
* @param _val_ - делимое.
|
* @param _val_ - делимое.
|
||||||
@@ -270,7 +274,7 @@ HAL_StatusTypeDef MEMSPI_WriteEnablingUntilTimeout(MEMSPI_HandleTypeDef *hmemspi
|
|||||||
* @return HAL status.
|
* @return HAL status.
|
||||||
* @note Считывает флаги до тех пор, пока они не будут в состоянии FlagStatus или до тех пор, пока таймаут не истечет.
|
* @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.
|
* @brief Update Timeout variables.
|
||||||
* @param Timeout - указатель на переменную содержащию значение таймаута
|
* @param Timeout - указатель на переменную содержащию значение таймаута
|
||||||
|
|||||||
Reference in New Issue
Block a user