39 for (i = 0; i < 4; i++)
49 for (i = 0; i < 3; i++)
66 for (i = 0; i < 3; i++)
70 for (i = 0; i < 2; i++)
85 for (i = 0; i < 2; i++)
100 for (i = 0; i < 2; i++)
115 for (i = 0; i < 3; i++)
116 flashStatus[i] = status[i];
130 uint8_t flashStatus[3];
133 for (i = 0; i < 2; i++)
181 uint8_t flashStatusIn[3];
182 uint32_t address32 = address << 11;
202 printf(
"Erasing sector (16 pages) %d. Please wait ...\r\n", address);
208 if ((flashStatusIn[0] & 0x01) == 0x00) {
231 uint8_t flashStatusIn[3];
232 uint32_t address32 = address << 7;
252 printf(
"Erasing Block %d. Please wait ...\r\n", address);
258 if ((flashStatusIn[0] & 0x01) == 0x00) {
281 uint8_t flashStatusIn[3];
282 uint32_t address32 = address << 4;
302 printf(
"Erasing Block %d. Please wait ...\r\n", address);
308 if ((flashStatusIn[0] & 0x01) == 0x00) {
331 uint8_t flashStatusIn[3];
332 uint32_t address32 = address << 12;
352 printf(
"Erasing Sector %d. Please wait ...\r\n", address);
358 if ((flashStatusIn[0] & 0x01) == 0x00) {
370 printf(
"Erasing Sector %d. Finished ...\r\n", address);
380 uint8_t flashStatusIn[3];
397 printf(
"Erasing entire device. Please wait ...\r\n");
403 if ((flashStatusIn[0] & 0x01) == 0x00) {
408 printf(
"Entire device erased\r\n");
431 uint8_t readBuffer[256];
435 address32 = (address << 8) + 0;
436 for (i = 0; i < 64 + 4; i++)
452 for (i = 0; i < 64; i++)
458 address32 = (address << 8) + 64;
459 for (i = 0; i < 64 + 4; i++)
475 for (i = 0; i < 64; i++)
481 address32 = (address << 8) + 128;
482 for (i = 0; i < 64 + 4; i++)
498 for (i = 0; i < 64; i++)
504 address32 = (address << 8) + 192;
505 for (i = 0; i < 64 + 4; i++)
521 for (i = 0; i < 64; i++)
526 for (i = 0; i < 256; i++) {
527 flashRead[i] = readBuffer[i];
544 uint8_t flashStatusIn[2];
546 uint32_t address32 = page << 8;
547 uint8_t dataPage[256 + 4];
551 printf(
"flashxWritePage page: %d length: %d\r\n",page,count);
555 printf(
"\r\n %02X",i);
556 printf(
" 0x%02X",data[i]);
573 for (i = 0; i < count; i++)
574 dataPage[i + address] = data[i];
579 address32 = (page << 8) + 0;
584 for (i = 0; i < 64; i++)
596 if ((flashStatusIn[0] & 0x01) == 0x00) {
622 address32 = (page << 8) + 64;
627 for (i = 0; i < 64; i++)
639 if ((flashStatusIn[0] & 0x01) == 0x00) {
665 address32 = (page << 8) + 128;
670 for (i = 0; i < 64; i++)
682 if ((flashStatusIn[0] & 0x01) == 0x00) {
708 address32 = (page << 8) + 192;
713 for (i = 0; i < 64; i++)
725 if ((flashStatusIn[0] & 0x01) == 0x00) {
754 uint8_t flashStatusIn[2];
755 uint32_t address32 = address << 8;
767 address32 = (address << 8) + 0;
772 for (i = 0; i < 64; i++)
784 if ((flashStatusIn[0] & 0x01) == 0x00) {
810 address32 = (address << 8) + 64;
815 for (i = 0; i < 64; i++)
827 if ((flashStatusIn[0] & 0x01) == 0x00) {
853 address32 = (address << 8) + 128;
858 for (i = 0; i < 64; i++)
870 if ((flashStatusIn[0] & 0x01) == 0x00) {
896 address32 = (address << 8) + 192;
901 for (i = 0; i < 64; i++)
913 if ((flashStatusIn[0] & 0x01) == 0x00) {
1009 myPrintkI(
"Flash parameters reset to defaults\r\n");
1022 printf(
"FLASH Parameters\r\n");
1024 uint8_t data0[256 + 8];
1034 pFlashParameters[i] = data0[i];
1037 for (i = 0; i < 256; i++)
1038 pFlashParameters[i] = data0[i];
1041 pFlashParameters[i + 256] = data0[i];
1044 for (i = 0; i < 256; i++)
1045 pFlashParameters[i] = data0[i];
1047 for (i = 0; i < 256; i++)
1048 pFlashParameters[i + 256] = data0[i];
1051 pFlashParameters[i + 512] = data0[i];
1054 for (i = 0; i < 256; i++)
1055 pFlashParameters[i] = data0[i];
1057 for (i = 0; i < 256; i++)
1058 pFlashParameters[i + 256] = data0[i];
1060 for (i = 0; i < 256; i++)
1061 pFlashParameters[i + 512] = data0[i];
1064 pFlashParameters[i + 768] = data0[i];
1091 printf(
" Manual Trigger: %s\r\n",
flashParameters.manualTrigger ?
"True" :
"False");
1092 printf(
" Ignore BME688: %s\r\n",
flashParameters.ignoreBME688 ?
"True" :
"False");
1093 printf(
" No UART0: %s\r\n",
flashParameters.nouart0 ?
"True" :
"False");
1109 printf(
"Flash Parameter Key: 0x%08X Not Set\r\n",
flashParameters.key);
1127 myPrintkI(
"Setting Flash Parameters\r\n");
1130 k_sleep(K_MSEC(200));
1137 myPrintkI(
"Flash Parameters Written\r\n");
1139 memcpy(
tmpData, pFlashParameters, 256);
1144 memcpy(
tmpData, pFlashParameters, 256);
1146 memcpy(
tmpData, pFlashParameters + 256, 256);
1151 memcpy(
tmpData, pFlashParameters, 256);
1153 memcpy(
tmpData, pFlashParameters + 256, 256);
1155 memcpy(
tmpData, pFlashParameters + 512, 256);
1168 printf(
"Flash Parameters Set\r\n");
1184 uint8_t data0[256 + 8];
1192 pFlashParameters[i] = data0[i];
1195 for (i = 0; i < 256; i++)
1196 pFlashParameters[i] = data0[i];
1199 pFlashParameters[i + 256] = data0[i];
1202 for (i = 0; i < 256; i++)
1203 pFlashParameters[i] = data0[i];
1205 for (i = 0; i < 256; i++)
1206 pFlashParameters[i + 256] = data0[i];
1209 pFlashParameters[i + 512] = data0[i];
1212 for (i = 0; i < 256; i++)
1213 pFlashParameters[i] = data0[i];
1215 for (i = 0; i < 256; i++)
1216 pFlashParameters[i + 256] = data0[i];
1218 for (i = 0; i < 256; i++)
1219 pFlashParameters[i + 512] = data0[i];
1222 pFlashParameters[i + 768] = data0[i];
1226 for (i = 0; i < 256; i++)
1227 pFlashParameters[i] = data0[i];
1229 for (i = 0; i < 256; i++)
1230 pFlashParameters[i + 256] = data0[i];
1232 for (i = 0; i < 256; i++)
1233 pFlashParameters[i + 512] = data0[i];
1235 for (i = 0; i < 256; i++)
1236 pFlashParameters[i + 768] = data0[i];
1239 pFlashParameters[i + 1024] = data0[i];
1255 uint8_t flashIDIn[5];
1260 myPrintkI(
"W25Q64JV 64MB Flash Memory - Present\r\n");
1263 myPrintkW(
"W25Q64JV 64MB Flash Memory - Not Present\r\n");
W25Q64JV driver header file.
struct spi_config spi_cfg1
SPI configuration.
struct spi_buf tx_bufs[]
SPI TX buffer structure.
const struct spi_buf_set rx
SPI RX buffer structure.
uint8_t buffer_rx[SPI_BUF_SIZE+8]
SPI receive buffer0.
const struct device *const spi_dev
flashParametersStruct flashParameters
working valuses of flash parameters in RAM
uint32_t sensorTypePresentAll
uint8_t buffer_tx[SPI_BUF_SIZE+8]
SPI transmit buffer.
struct spi_buf rx_bufs[]
SPI RX buffer structure.
const struct spi_buf_set tx
SPI TX buffer structure.
#define W25Q64JW_WHO_AM_I_REG0
#define W25Q64JW_WHO_AM_I_REG2
#define W25Q64JW_WHO_AM_I_REG1
#define FLASHPARAMETERSTART
int myPrintkI(char *restrict fmt,...)
prints an information message to the UART
#define FLASHPARAMETERKEY
#define DEFAULT_DUTYCYCLE
int myPrintkW(char *restrict fmt,...)
prints a warning message to the UART
Flash parameters structure.
void displayFlashxParameters(void)
displays the NV flash parameters.
void flashxClearParameters(void)
clears/initializes the flash parameters in RAM
int initW25Q64JV(void)
Initiailizes the W25Q64JW.
void flashxWritePage(uint32_t page, uint32_t address, uint8_t *data, uint16_t count)
writes data to address in serial flash over the SPI bus.
void readNVFlashxID(uint8_t *flashId)
reads the NV Flash ID over the SPI bus.
void flashxEraseBlock1(uint32_t address)
erases a 2K block page over the SPI bus.
void flashxReadPage(uint32_t address, uint8_t *flashRead)
reads a 256 byte page over the SPI bus.
void flashxErasePage(uint32_t address)
erases a 256 byte page over the SPI bus.
void flashxEraseSector(uint32_t address)
erases a 256K byte sector over the SPI bus.
void flashxFillPage(uint32_t address, uint16_t data)
fills a 256 byte page with data over the SPI bus.
void setFlashxParameters(uint8_t display)
loads the NV Flash parameters from teh RAM flash parameters
void flashxErase(void)
erases the entire 8 Mb over the SPI bus.
void readNVFlashxStatus(uint8_t *flashStatus)
reads the 3 NV Flash status registers over the SPI bus.
void writeNVFlashxStatus(void)
writes NV Flash status register2 over the SPI bus.
void getFlashparameters(void)
Read the stored flash parameter block from serial flash.
void flashxEraseBlock2(uint32_t address)