Skip to content

Commit 818b608

Browse files
authored
Merge pull request #1 from fprwi6labs/dev
Add source files
2 parents b39ec1b + 73892c8 commit 818b608

File tree

11 files changed

+2276
-0
lines changed

11 files changed

+2276
-0
lines changed

README.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,37 @@
11
# MX25R6435F
22
Arduino library to support the Quad-SPI NOR Flash memory MX25R6435F
3+
4+
## API
5+
6+
The library provides the following API:
7+
8+
* begin()
9+
* end()
10+
* write()
11+
* read()
12+
* mapped()
13+
* erase()
14+
* eraseChip()
15+
* eraseSector()
16+
* suspendErase()
17+
* resumeErase()
18+
* sleep()
19+
* wakeup()
20+
* status()
21+
* info()
22+
* length()
23+
24+
## Examples
25+
26+
3 sketches provide basic examples to show how to use the library API.
27+
demo.ino uses basic read/write functions.
28+
eraseChip.ino erases all data present in the memory.
29+
memoryMappedMode.ino shows how to use the mapped mode.
30+
31+
## Documentation
32+
33+
You can find the source files at
34+
https://github.com/stm32duino/MX25R6435F
35+
36+
The MX25R6435F datasheet is available at
37+
http://www.mxic.com.tw/Lists/Datasheet/Attachments/6270/MX25R6435F,%20Wide%20Range,%2064Mb,%20v1.4.pdf

examples/demo/demo.ino

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
/*
2+
* demo
3+
*
4+
* This sketch show how to use the mx25r6435f driver.
5+
*
6+
*/
7+
8+
#include <MX25R6435F.h>
9+
10+
#define BUFFER_SIZE ((uint32_t)0x0100)
11+
#define WRITE_READ_ADDR ((uint32_t)0x0050)
12+
13+
uint8_t aTxBuffer[BUFFER_SIZE];
14+
uint8_t aRxBuffer[BUFFER_SIZE];
15+
16+
static void Fill_Buffer (uint8_t *pBuffer, uint32_t uwBufferLength, uint32_t uwOffset);
17+
static uint8_t Buffercmp (uint8_t* pBuffer1, uint8_t* pBuffer2, uint32_t BufferLength);
18+
19+
void setup() {
20+
Serial.begin(9600);
21+
}
22+
23+
void loop() {
24+
uint8_t status;
25+
26+
Serial.println("*****************************************************************");
27+
Serial.println("*********************** Memory Test *****************************");
28+
Serial.println("*****************************************************************");
29+
30+
MX25R6435F.end();
31+
32+
/*##-1- Configure the device ##########################################*/
33+
/* Device configuration */
34+
MX25R6435F.begin();
35+
status = MX25R6435F.status();
36+
37+
if ((status == MEMORY_ERROR) || (status == MEMORY_SUSPENDED) || (status == MEMORY_BUSY))
38+
{
39+
Serial.println("Init : FAILED, Test Aborted");
40+
}
41+
else
42+
{
43+
Serial.println("Init : OK");
44+
45+
/*##-2- Read & check the info #######################################*/
46+
if( (MX25R6435F.info(MEMORY_SIZE) != 0x800000) ||
47+
(MX25R6435F.info(MEMORY_SECTOR_SIZE) != 0x1000) ||
48+
(MX25R6435F.info(MEMORY_PAGE_SIZE) != 0x100) ||
49+
(MX25R6435F.info(MEMORY_SECTOR_NUMBER) != 2048) ||
50+
(MX25R6435F.info(MEMORY_PAGE_NUMBER) != 32768))
51+
{
52+
Serial.println("GET INFO : FAILED, Test Aborted");
53+
}
54+
else
55+
{
56+
Serial.println("GET INFO : OK");
57+
58+
/*##-3- Erase memory ################################################*/
59+
if(MX25R6435F.erase(WRITE_READ_ADDR) != MEMORY_OK)
60+
{
61+
Serial.println("ERASE : FAILED, Test Aborted");
62+
}
63+
else
64+
{
65+
Serial.println("ERASE : OK");
66+
67+
/*##-4- memory read/write access #################################*/
68+
/* Fill the buffer to write */
69+
Fill_Buffer(aTxBuffer, BUFFER_SIZE, 0xD20F);
70+
71+
/* Write data to the QSPI memory */
72+
if(MX25R6435F.write(aTxBuffer, WRITE_READ_ADDR, BUFFER_SIZE) == 0)
73+
{
74+
Serial.println("WRITE : FAILED, Test Aborted");
75+
}
76+
else
77+
{
78+
Serial.println("WRITE : OK");
79+
80+
/* Read back data from the QSPI memory */
81+
MX25R6435F.read(aRxBuffer, WRITE_READ_ADDR, BUFFER_SIZE);
82+
83+
/*##-5- Checking data integrity ############################################*/
84+
if(Buffercmp(aRxBuffer, aTxBuffer, BUFFER_SIZE) > 0)
85+
{
86+
Serial.println("COMPARE : FAILED, Test Aborted");
87+
}
88+
else
89+
{
90+
Serial.println("Test : OK");
91+
}
92+
}
93+
}
94+
}
95+
}
96+
97+
// Enables the deep power mode
98+
MX25R6435F.sleep();
99+
delay(5000);
100+
MX25R6435F.wakeup();
101+
}
102+
103+
static void Fill_Buffer(uint8_t *pBuffer, uint32_t uwBufferLenght, uint32_t uwOffset)
104+
{
105+
uint32_t tmpIndex = 0;
106+
107+
/* Put in global buffer different values */
108+
for (tmpIndex = 0; tmpIndex < uwBufferLenght; tmpIndex++ )
109+
{
110+
pBuffer[tmpIndex] = tmpIndex + uwOffset;
111+
}
112+
}
113+
114+
static uint8_t Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint32_t BufferLength)
115+
{
116+
while (BufferLength--)
117+
{
118+
if (*pBuffer1 != *pBuffer2)
119+
{
120+
return 1;
121+
}
122+
123+
pBuffer1++;
124+
pBuffer2++;
125+
}
126+
127+
return 0;
128+
}

examples/eraseChip/eraseChip.ino

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* eraseChip
3+
*
4+
* Sets all of the bytes of the memory to the default value (0xFF).
5+
* Could take until 240 seconds to erase all the memory (worst conditions).
6+
*
7+
*/
8+
9+
#include <MX25R6435F.h>
10+
11+
void setup() {
12+
// initialize the LED pin as an output.
13+
pinMode(LED_BUILTIN, OUTPUT);
14+
15+
// initialize the MX25R6435F flash memory
16+
MX25R6435F.begin();
17+
18+
// erase all the memory: set byte to 0xFF
19+
MX25R6435F.eraseChip();
20+
21+
// turn the LED on when we're done
22+
digitalWrite(LED_BUILTIN, HIGH);
23+
}
24+
25+
void loop() {
26+
/** Empty loop. **/
27+
}
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
/*
2+
* memoryMappedMode
3+
*
4+
* This sketch show how to use the mx25r6435f driver and the memory mapped mode.
5+
*
6+
*/
7+
8+
#include <MX25R6435F.h>
9+
10+
#define BUFFER_SIZE ((uint32_t)0x0100)
11+
#define WRITE_READ_ADDR ((uint32_t)0x0050)
12+
13+
uint8_t aTxBuffer[BUFFER_SIZE];
14+
uint8_t aRxBuffer[BUFFER_SIZE];
15+
16+
static void Fill_Buffer (uint8_t *pBuffer, uint32_t uwBufferLength, uint32_t uwOffset);
17+
18+
void setup() {
19+
Serial.begin(9600);
20+
}
21+
22+
void loop() {
23+
/* QSPI info structure */
24+
uint8_t status, read_status = 0;
25+
uint16_t index = 0;
26+
uint8_t *mem_addr;
27+
28+
Serial.println("*****************************************************************");
29+
Serial.println("********************* Memory mapped Test ************************");
30+
Serial.println("*****************************************************************");
31+
32+
MX25R6435F.end();
33+
34+
/*##-1- Configure the device ##########################################*/
35+
/* Device configuration */
36+
MX25R6435F.begin();
37+
status = MX25R6435F.status();
38+
39+
if ((status == MEMORY_ERROR) || (status == MEMORY_SUSPENDED) || (status == MEMORY_BUSY))
40+
{
41+
Serial.println("Init : FAILED, Test Aborted");
42+
}
43+
else
44+
{
45+
Serial.println("Init : OK");
46+
47+
/*##-2- Read & check the info #######################################*/
48+
if( (MX25R6435F.info(MEMORY_SIZE) != 0x800000) ||
49+
(MX25R6435F.info(MEMORY_SECTOR_SIZE) != 0x1000) ||
50+
(MX25R6435F.info(MEMORY_PAGE_SIZE) != 0x100) ||
51+
(MX25R6435F.info(MEMORY_SECTOR_NUMBER) != 2048) ||
52+
(MX25R6435F.info(MEMORY_PAGE_NUMBER) != 32768))
53+
{
54+
Serial.println("GET INFO : FAILED, Test Aborted");
55+
}
56+
else
57+
{
58+
Serial.println("GET INFO : OK");
59+
60+
/*##-3- Erase memory ################################################*/
61+
if(MX25R6435F.erase(WRITE_READ_ADDR) != MEMORY_OK)
62+
{
63+
Serial.println("ERASE : FAILED, Test Aborted");
64+
}
65+
else
66+
{
67+
Serial.println("ERASE : OK");
68+
69+
/*##-4- memory read/write access #################################*/
70+
/* Fill the buffer to write */
71+
Fill_Buffer(aTxBuffer, BUFFER_SIZE, 0xD20F);
72+
73+
for(uint32_t i = 0; i < 1; i++)
74+
{
75+
if(MX25R6435F.write(aTxBuffer, (i * 0x100), BUFFER_SIZE) != BUFFER_SIZE)
76+
{
77+
Serial.println("WRITE : FAILED, Test Aborted");
78+
}
79+
}
80+
81+
/* Read back data from the QSPI memory */
82+
mem_addr = MX25R6435F.mapped();
83+
84+
if(mem_addr != NULL) {
85+
for(uint32_t i = 0; i < 1; i++)
86+
{
87+
mem_addr += (i * 0x100);
88+
for (index = 0; index < BUFFER_SIZE; index++)
89+
{
90+
if (*mem_addr != aTxBuffer[index])
91+
{
92+
read_status++;
93+
Serial.println(read_status);
94+
}
95+
mem_addr++;
96+
}
97+
}
98+
99+
100+
if(read_status != 0)
101+
{
102+
Serial.println("READ : FAILED");
103+
Serial.println("Test Aborted");
104+
}
105+
else
106+
{
107+
Serial.println("READ : OK");
108+
Serial.println("Test : OK");
109+
110+
}
111+
} else {
112+
Serial.println("MAPPED MODE : FAILED");
113+
Serial.println("Test Aborted");
114+
}
115+
}
116+
}
117+
}
118+
119+
delay(5000);
120+
}
121+
122+
static void Fill_Buffer(uint8_t *pBuffer, uint32_t uwBufferLenght, uint32_t uwOffset)
123+
{
124+
uint32_t tmpIndex = 0;
125+
126+
/* Put in global buffer different values */
127+
for (tmpIndex = 0; tmpIndex < uwBufferLenght; tmpIndex++ )
128+
{
129+
pBuffer[tmpIndex] = tmpIndex + uwOffset;
130+
}
131+
}

keywords.txt

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#######################################
2+
# Syntax Coloring Map MX25R6435F
3+
#######################################
4+
5+
#######################################
6+
# Datatypes (KEYWORD1)
7+
#######################################
8+
9+
MX25R6435F KEYWORD
10+
11+
#######################################
12+
# Methods and Functions (KEYWORD2)
13+
#######################################
14+
begin KEYWORD2
15+
end KEYWORD2
16+
write KEYWORD2
17+
read KEYWORD2
18+
mapped KEYWORD2
19+
erase KEYWORD2
20+
eraseSector KEYWORD2
21+
eraseChip KEYWORD2
22+
suspendErase KEYWORD2
23+
resumeErase KEYWORD2
24+
sleep KEYWORD2
25+
wakeup KEYWORD2
26+
status KEYWORD2
27+
info KEYWORD2
28+
length KEYWORD2
29+
30+
#######################################
31+
# Constants (LITERAL1)
32+
#######################################
33+
MEMORY_SIZE LITERAL1
34+
MEMORY_SECTOR_SIZE LITERAL1
35+
MEMORY_SECTOR_NUMBER LITERAL1
36+
MEMORY_PAGE_SIZE LITERAL1
37+
MEMORY_PAGE_NUMBER LITERAL1
38+
MEMORY_OK LITERAL1
39+
MEMORY_ERROR LITERAL1
40+
MEMORY_BUSY LITERAL1
41+
MEMORY_NOT_SUPPORTED LITERAL1
42+
MEMORY_SUSPENDED LITERAL1

library.properties

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
name=MX25R6435F
2+
version=1.0.0
3+
author=Wi6Labs
4+
maintainer=stm32duino
5+
sentence=Quad-SPI NOR Flash memory library.
6+
paragraph=This library provides Arduino support for the 64-Mbit Quad-SPI NOR Flash memory MX25R6435F connected to the Quad-SPI interface of a STM32 board.
7+
category=Data Storage
8+
url=https://github.com/stm32duino/MX25R6435F
9+
architectures=stm32

0 commit comments

Comments
 (0)