Init qspi flash
This commit is contained in:
@@ -23,9 +23,10 @@
|
|||||||
/* Private includes ----------------------------------------------------------*/
|
/* Private includes ----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
#define LOGGER_LEVEL_ALL
|
#define LOGGER_LEVEL_ALL
|
||||||
|
#include "../../Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.h"
|
||||||
|
#include "../../Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "llfs.h"
|
#include "llfs.h"
|
||||||
#include "../../Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.h"
|
|
||||||
#include "lcd_api.h"
|
#include "lcd_api.h"
|
||||||
|
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
@@ -113,154 +114,18 @@ int main(void)
|
|||||||
MX_LWIP_Init();
|
MX_LWIP_Init();
|
||||||
MX_QUADSPI_Init();
|
MX_QUADSPI_Init();
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
|
|
||||||
|
/* Initialize QSPI */
|
||||||
|
BSP_QSPI_Init();
|
||||||
|
BSP_QSPI_MemoryMappedMode();
|
||||||
|
WRITE_REG(QUADSPI->LPTR, 0xFFF);
|
||||||
|
|
||||||
|
/* Initialize the LCD */
|
||||||
lcd_init(true);
|
lcd_init(true);
|
||||||
|
|
||||||
|
/* Initialize the filesystem */
|
||||||
llfs_init();
|
llfs_init();
|
||||||
|
|
||||||
|
|
||||||
FILE *f = fopen("test.txt", "rw");
|
|
||||||
if (f == NULL) {
|
|
||||||
LOG_INFO(TAG, "File not found test.txt");
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
LOG_INFO(TAG, "File found test.txt");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test POSIX file operations
|
|
||||||
// fgetc
|
|
||||||
int c;
|
|
||||||
printf("Printing file:\n");
|
|
||||||
while ((c = fgetc(f)) != EOF) {
|
|
||||||
printf("%c", c);
|
|
||||||
}
|
|
||||||
LOG_INFO(TAG, "File printed");
|
|
||||||
|
|
||||||
// fseek
|
|
||||||
fseek(f, 0, SEEK_SET);
|
|
||||||
LOG_INFO(TAG, "File seeked to start");
|
|
||||||
|
|
||||||
// ftell
|
|
||||||
long pos = ftell(f);
|
|
||||||
LOG_INFO(TAG, "File position: %d", pos);
|
|
||||||
|
|
||||||
// fread
|
|
||||||
char buf[100];
|
|
||||||
size_t bytes_read = fread(buf, 1, 100, f);
|
|
||||||
LOG_INFO(TAG, "Read %d bytes from file", bytes_read);
|
|
||||||
printf("Read from file:\n");
|
|
||||||
for (int i = 0; i < bytes_read; i++) {
|
|
||||||
printf("%c", buf[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Rewind the file
|
|
||||||
LOG_INFO(TAG, "Before File rewinded, pos: %d", ftell(f));
|
|
||||||
rewind(f);
|
|
||||||
LOG_INFO(TAG, "File rewinded, pos: %d", ftell(f));
|
|
||||||
|
|
||||||
// Get the file size fstat
|
|
||||||
struct stat st;
|
|
||||||
fstat(fileno(f), &st);
|
|
||||||
LOG_INFO(TAG, "File size: %d", st.st_size);
|
|
||||||
|
|
||||||
|
|
||||||
// Get a list of all files with the .bmp extension
|
|
||||||
llfs_file_t file_list[10];
|
|
||||||
size_t num_files = llfs_file_list(file_list, 10, "*.bmp");
|
|
||||||
LOG_INFO(TAG, "Found %d files with the .bmp extension", num_files);
|
|
||||||
for (int i = 0; i < num_files; i++) {
|
|
||||||
LOG_INFO(TAG, "File %d: %s", i, file_list[i].name);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get a list of files with .txt or .html
|
|
||||||
num_files = llfs_file_list(file_list, 10, "*.txt");
|
|
||||||
LOG_INFO(TAG, "Found %d files with the .txt or .html extension", num_files);
|
|
||||||
for (int i = 0; i < num_files; i++) {
|
|
||||||
LOG_INFO(TAG, "File %d: %s", i, file_list[i].name);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Loop over all files using the iterator
|
|
||||||
LOG_INFO(TAG, "Looping over all files, using the iterator");
|
|
||||||
void *mem = NULL;
|
|
||||||
llfs_file_t *file;
|
|
||||||
while ((file = llfs_next_file(&mem, NULL)) != NULL) {
|
|
||||||
LOG_INFO(TAG, "File: %s", file->name);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Loop over all files with the .bmp extension using the iterator
|
|
||||||
LOG_INFO(TAG, "Looping over all files with the .bmp extension, using the iterator");
|
|
||||||
mem = NULL;
|
|
||||||
while ((file = llfs_next_file(&mem, "*.bmp")) != NULL) {
|
|
||||||
LOG_INFO(TAG, "File: %s", file->name);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the number of files in the filesystem
|
|
||||||
size_t num_files_in_fs = llfs_file_count();
|
|
||||||
LOG_INFO(TAG, "Number of files in the filesystem: %d", num_files_in_fs);
|
|
||||||
|
|
||||||
|
|
||||||
fclose(f);
|
|
||||||
|
|
||||||
// Try opening multiple files
|
|
||||||
LOG_INFO(TAG, "Opening an closing multiple files");
|
|
||||||
FILE * f1 = fopen("test.txt", "rw");
|
|
||||||
if (f1 == NULL) {
|
|
||||||
LOG_INFO(TAG, "File not found f1");
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
LOG_INFO(TAG, "File found f1");
|
|
||||||
}
|
|
||||||
// Get the fileno
|
|
||||||
int fd = fileno(f1);
|
|
||||||
LOG_INFO(TAG, "File descriptor f1: %d", fd);
|
|
||||||
|
|
||||||
FILE * f2 = fopen("test.txt", "rw");
|
|
||||||
if (f2 == NULL) {
|
|
||||||
LOG_INFO(TAG, "File not found f2");
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
LOG_INFO(TAG, "File found f2");
|
|
||||||
}
|
|
||||||
// Get the fileno
|
|
||||||
fd = fileno(f2);
|
|
||||||
LOG_INFO(TAG, "File descriptorf2: %d", fd);
|
|
||||||
|
|
||||||
LOG_INFO(TAG, "Closing f1");
|
|
||||||
fclose(f1);
|
|
||||||
|
|
||||||
FILE * f3 = fopen("test.txt", "rw");
|
|
||||||
if (f3 == NULL) {
|
|
||||||
LOG_INFO(TAG, "File not found f3");
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
LOG_INFO(TAG, "File found f3");
|
|
||||||
}
|
|
||||||
// Get the fileno
|
|
||||||
fd = fileno(f3);
|
|
||||||
LOG_INFO(TAG, "File descriptor f3: %d", fd);
|
|
||||||
|
|
||||||
LOG_INFO(TAG, "Closing f2");
|
|
||||||
fclose(f2);
|
|
||||||
|
|
||||||
LOG_INFO(TAG, "Closing f3");
|
|
||||||
fclose(f3);
|
|
||||||
|
|
||||||
// Try opening a file multiple times, until it fails
|
|
||||||
int i = 0;
|
|
||||||
LOG_INFO(TAG, "Opening a file multiple times, until it fails");
|
|
||||||
while (1) {
|
|
||||||
f = fopen("test.txt", "rw");
|
|
||||||
LOG_INFO(TAG, "File descriptor: %d", fileno(f));
|
|
||||||
if (f == NULL) {
|
|
||||||
LOG_INFO(TAG, "File not found test.txt");
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
LOG_INFO(TAG, "File found test.txt");
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
LOG_INFO(TAG, "File opened %d times", i);
|
|
||||||
|
|
||||||
|
|
||||||
/* USER CODE END 2 */
|
/* USER CODE END 2 */
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
/* USER CODE BEGIN WHILE */
|
/* USER CODE BEGIN WHILE */
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ MEMORY
|
|||||||
{
|
{
|
||||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 320K
|
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 320K
|
||||||
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K
|
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K
|
||||||
|
QSPI (xrw) : ORIGIN = 0x90000000, LENGTH = 16M
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sections */
|
/* Sections */
|
||||||
@@ -182,4 +183,9 @@ SECTIONS
|
|||||||
}
|
}
|
||||||
|
|
||||||
.ARM.attributes 0 : { *(.ARM.attributes) }
|
.ARM.attributes 0 : { *(.ARM.attributes) }
|
||||||
|
|
||||||
|
.ext_qspi_flash :
|
||||||
|
{
|
||||||
|
*(.ext_qspi_flash)
|
||||||
|
} >QSPI
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user