• 大小: 2KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-05-16
  • 语言: 其他
  • 标签: stm32  MX25L  MX25L25673  

资源简介

smt32 上面 MX25L25673 驱动,支持DMA读。 可以配置锁。使用32位地址

资源截图

代码片段和文件信息

#include “stm32f1xx_hal.h“
#include “cmsis_os.h“
#include “main.h“
#include “MX25LXX.h“

/*****************************************************/
extern SPI_HandleTypeDef hspi1;
#define MX25XX_SPI hspi1
#define MX25LxxCS(x) HAL_GPIO_WritePin(SPI1_CS_GPIO_PortSPI1_CS_Pinx)
#define MX25LxxLockEnable 1
#define MX25Lxx4BytesMode 1
/*****************************************************/

/******************flash cmd *************************/
#define COMMAND_WREN      0x06
#define COMMAND_WRDI      0x04
#define COMMAND_RDSR      0x05
#define COMMAND_WRSR      0x01
#define COMMAND_READ      0x03
#define COMMAND_FREAD     0x0B
#define COMMAND_FREAD4B   0x0C
#define COMMAND_READ4B    0x13
#define COMMAND_PP4B      0x12
#define COMMAND_SE4B      0x21
#define COMMAND_EN4B      0xB7
#define COMMAND_RDSCUR    0x2B
#define COMMAND_RSTQIO    0xF5
#define COMMAND_WRITE     0x02
#define COMMAND_RDID      0x9F
#define COMMAND_SE        0x20 //sector erase
#define COMMAND_BE        0x52 //block erase
#define COMMAND_CE        0x60 //chip erase
#define COMMAND_RDCR      0x15

#define STATUS_WIP    0b00000001
#define STATUS_WEL    0b00000010
#define STATUS_BP0    0b00000100
#define STATUS_BP1    0b00001000
#define STATUS_BP2    0b00010000
#define STATUS_BP3    0b00100000
#define STATUS_RES    0b01000000
#define STATUS_SWRD   0b10000000

#define CONFIG_4BYTE  0b00100000

#define RDSCUR_P_FAIL 0b00100000
#define RDSCUR_E_FAIL 0b01000000

#define DUMMY         0xFF

/******************end flash cmd *********************/

#if MX25LxxLockEnable
static osMutexId MX25lxxMutex;

#define MX25LxxLock() osMutexWait(MX25lxxMutex  osWaitForever)
#define MX25LxxUnLock()  osMutexRelease(MX25lxxMutex)
#else
#define MX25LxxLock()
#define MX25LxxUnLock()
#endif

uint8_t MX25LxxConfigeRegister();
uint8_t MX25LxxStatus();
uint8_t MX25LxxRSTQIO();
int MX25LxxWriteEnable();
#if MX25Lxx4BytesMode
static int MX25LxxEnter4B();
#endif

static int MX25LxxWaitForDecieReady()
{
do{
if (IS_MASK_CLEAR(MX25LxxStatus() STATUS_WIP)) //wait write done
break;
}while(1);

return 0;
}

#if MX25Lxx4BytesMode
static int MX25LxxEnter4B()
{
    uint8_t d[2] = {COMMAND_EN4B0};
MX25LxxLock() ;
MX25LxxCS(0);
    HAL_SPI_Transmit(&MX25XX_SPId10xff);
MX25LxxCS(1);
MX25LxxUnLock();
MX25LxxWaitForDecieReady();
return 0;
}
#endif

int MX25LxxInit()
{
#if MX25LxxLockEnable
/* Create Mutex lock */
osMutexDef(MX25MUTEX);

/* Create the Mutex used by the two threads */
MX25lxxMutex = osMutexCreate(osMutex(MX25MUTEX));
 
#endif

#if MX25Lxx4BytesMode
MX25LxxEnter4B();
if(IS_MASK_SET( MX25LxxConfigeRegister() CONFIG_4BYTE)  )
return 0;

//MX25LxxRSTQIO();
    return -1;
#else
return 0;
#endif
}
/**
*Read chip id
*return chip id
**/
uint32_t MX25LxxReadChipID()
{
    uint8_t d[4] = {COMMAND_RDID0};
MX25LxxLock();
MX25LxxCS(0);
    HAL_SPI_Transmit(&MX25XX_SPId

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        8538  2018-12-25 22:58  MX25LXX.c

评论

共有 条评论