You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
589 lines
18 KiB
589 lines
18 KiB
### SDRAM Cubemx分配的IO和 BSP一致
|
|
|
|
野火429的操作
|
|
|
|
Cubemx SDRAM1 4bank 13 16bit 16-enabled
|
|
|
|
PC0 FMC_SDNWE n/a Alternate Function Push Pull
|
|
|
|
PD0 FMC_D2 n/a Alternate Function Push Pull
|
|
PD1 FMC_D3 n/a Alternate Function Push Pull
|
|
PD8 FMC_D13 n/a Alternate Function Push Pull
|
|
PD9 FMC_D14 n/a Alternate Function Push Pull
|
|
PD10 FMC_D15 n/a Alternate Function Push Pull
|
|
PD14 FMC_D0 n/a Alternate Function Push Pull
|
|
PD15 FMC_D1 n/a Alternate Function Push Pull
|
|
|
|
|
|
PE0 FMC_NBL0 n/a Alternate Function Push Pull
|
|
PE1 FMC_NBL1 n/a Alternate Function Push Pull
|
|
PE7 FMC_D4 n/a Alternate Function Push Pull
|
|
PE8 FMC_D5 n/a Alternate Function Push Pull
|
|
PE9 FMC_D6 n/a Alternate Function Push Pull
|
|
PE10 FMC_D7 n/a Alternate Function Push Pull
|
|
PE11 FMC_D8 n/a Alternate Function Push Pull
|
|
PE12 FMC_D9 n/a Alternate Function Push Pull
|
|
PE13 FMC_D10 n/a Alternate Function Push Pull
|
|
PE14 FMC_D11 n/a Alternate Function Push Pull
|
|
PE15 FMC_D12 n/a Alternate Function Push Pull
|
|
|
|
PF0 FMC_A0 n/a Alternate Function Push Pull
|
|
PF1 FMC_A1 n/a Alternate Function Push Pull
|
|
PF2 FMC_A2 n/a Alternate Function Push Pull
|
|
PF3 FMC_A3 n/a Alternate Function Push Pull
|
|
PF4 FMC_A4 n/a Alternate Function Push Pull
|
|
PF5 FMC_A5 n/a Alternate Function Push Pull
|
|
|
|
PF11 FMC_SDNRAS n/a Alternate Function Push Pull
|
|
PF12 FMC_A6 n/a Alternate Function Push Pull
|
|
PF13 FMC_A7 n/a Alternate Function Push Pull
|
|
PF14 FMC_A8 n/a Alternate Function Push Pull
|
|
PF15 FMC_A9 n/a Alternate Function Push Pull
|
|
|
|
PG0 FMC_A10 n/a Alternate Function Push Pull
|
|
PG1 FMC_A11 n/a Alternate Function Push Pull
|
|
|
|
PG2 FMC_A12 n/a Alternate Function Push Pull
|
|
PG4 FMC_BA0 n/a Alternate Function Push Pull
|
|
PG5 FMC_BA1 n/a Alternate Function Push Pull
|
|
PG8 FMC_SDCLK n/a Alternate Function Push Pull
|
|
PG15 FMC_SDNCAS n/a Alternate Function Push Pull
|
|
|
|
PH6 FMC_SDNE1 n/a Alternate Function Push Pull
|
|
PH7 FMC_SDCKE1 n/a Alternate Function Push Pull
|
|
|
|
|
|
|
|
| 左对齐 | Port | Port_pin ---> Fmc_pin |
|
|
| :-----| ----: | :----: |
|
|
| FMC_A0_GPIO_PORT | GPIOF | ***PF0 ------> FMC_A0***
|
|
|FMC_A1_GPIO_PORT | GPIOF | ***PF1 ------> FMC_A1***
|
|
|FMC_A2_GPIO_PORT | GPIOF | | ***PF2 ------> FMC_A2***
|
|
|FMC_A3_GPIO_PORT | GPIOF | ***PF3 ------> FMC_A3***
|
|
|FMC_A4_GPIO_PORT | GPIOF | ***PF4 ------> FMC_A4***
|
|
|FMC_A5_GPIO_PORT | GPIOF | ***PF5 ------> FMC_A5***
|
|
|FMC_A6_GPIO_PORT | GPIOF | ***PF12 ------> FMC_A6***
|
|
|FMC_A7_GPIO_PORT | GPIOF | ***PF13 ------> FMC_A7***
|
|
|FMC_A8_GPIO_PORT | GPIOF | ***PF14 ------> FMC_A8***
|
|
|FMC_A9_GPIO_PORT | GPIOF | ***PF15 ------> FMC_A9***
|
|
|FMC_A10_GPIO_PORT | GPIOG | ***PG0 ------> FMC_A10***
|
|
|FMC_A11_GPIO_PORT | GPIOG | ***PG1 ------> FMC_A11***
|
|
|FMC_A12_GPIO_PORT | GPIOG | ***PG2 ------> FMC_A12***
|
|
|FMC_D0_GPIO_PORT | GPIOD | ***PD14 ------> FMC_D0***
|
|
|FMC_D1_GPIO_PORT | GPIOD | ***PD15 ------> FMC_D1***
|
|
|FMC_D2_GPIO_PORT | GPIOD | ***PD0 ------> FMC_D2***
|
|
|FMC_D3_GPIO_PORT | GPIOD | ***PD1 ------> FMC_D3***
|
|
|FMC_D4_GPIO_PORT | GPIOE | ***PE7 ------> FMC_D4***
|
|
|FMC_D5_GPIO_PORT | GPIOE | ***PE8 ------> FMC_D5***
|
|
|FMC_D6_GPIO_PORT | GPIOE | ***PE9 ------> FMC_D6***
|
|
|FMC_D7_GPIO_PORT | GPIOE | ***PE10 ------> FMC_D7***
|
|
|FMC_D8_GPIO_PORT | GPIOE | ***PE11 ------> FMC_D8***
|
|
|FMC_D9_GPIO_PORT | GPIOE | ***PE12 ------> FMC_D9***
|
|
|FMC_D10_GPIO_PORT | GPIOE | ***PE13 ------> FMC_D10***
|
|
|FMC_D11_GPIO_PORT | GPIOE | ***PE14 ------> FMC_D11***
|
|
|FMC_D12_GPIO_PORT | GPIOE | ***PE15 ------> FMC_D12***
|
|
|FMC_D13_GPIO_PORT | GPIOD | ***PD8 ------> FMC_D13***
|
|
|FMC_D14_GPIO_PORT | GPIOD | ***PD9 ------> FMC_D14***
|
|
|FMC_D15_GPIO_PORT | GPIOD | ***PD10 ------> FMC_D15***
|
|
|FMC_CS_GPIO_PORT | GPIOH | ***PH6 ------> FMC_SDNE1*** CS
|
|
|FMC_BA0_GPIO_PORT | GPIOG | ***PG4 ------> FMC_BA0***
|
|
|FMC_BA1_GPIO_PORT | GPIOG | ***PG5 ------> FMC_BA1***
|
|
|FMC_WE_GPIO_PORT | GPIOC | ***PC0 ------> FMC_SDNWE** WE
|
|
|FMC_RAS_GPIO_PORT | GPIOF | ***PF11 ------> FMC_SDNRAS***
|
|
|FMC_CAS_GPIO_PORT | GPIOG | ***PG15 ------> FMC_SDNCAS***
|
|
|FMC_CLK_GPIO_PORT | GPIOG | ***PG8 ------> FMC_SDCLK***
|
|
|FMC_CKE_GPIO_PORT | GPIOH | ***PH7 ------> FMC_SDCKE1***
|
|
|FMC_UDQM_GPIO_PORT | GPIOE | ***PE0 ------> FMC_NBL0*** UDQM
|
|
|FMC_LDQM_GPIO_PORT | GPIOE | ***PE1 ------> FMC_NBL1*** LDQM
|
|
|
|
### nandflash
|
|
由于公用数据线
|
|
|
|
Cubemx 启用Nandflash2, 无法设置参数
|
|
|
|
自己 bsp_nand, 重新设置参数初始化
|
|
控制 IO, 需要自己初始化
|
|
|
|
// IO : PB13 R/B, PG9 CE, PD4 PD5 PD11 PD12
|
|
static void HAL_NAND_MspInit_Control_IO(NAND_HandleTypeDef *hnand)
|
|
|
|
|
|
|
|
### Malloc
|
|
内存分配 FTL 可能用到
|
|
|
|
需要设置 LD
|
|
|
|
<!-- MEMORY
|
|
{
|
|
{
|
|
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 192K
|
|
CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 64K
|
|
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K
|
|
SDRAM (xrw) : ORIGIN = 0xD0000000, LENGTH = 16*1024K
|
|
SDRAMMAP (rw) : ORIGIN = 0xD1E00000, LENGTH = 1664K
|
|
}
|
|
|
|
} -->
|
|
|
|
.sdram (NOLOAD) :
|
|
{
|
|
. = ALIGN(4);
|
|
_sdram_begin = .;
|
|
*(.sdram)
|
|
*(.sdram*)
|
|
. = ALIGN(4);
|
|
_sdram_end = .;
|
|
} >SDRAM
|
|
.sdrammap (NOLOAD) :
|
|
{
|
|
. = ALIGN(4);
|
|
__sdrammap_begin = .;
|
|
*(.sdrammap)
|
|
*(.sdrammap*)
|
|
. = ALIGN(4);
|
|
__sdrammap_end = .;
|
|
} >SDRAMMAP
|
|
|
|
|
|
### FTL
|
|
|
|
直接整合到 nand Flash?
|
|
直接分配系统内存,就2-3k大小
|
|
|
|
|
|
### DMA2D启用
|
|
ARGB8888
|
|
|
|
|
|
### LTDC
|
|
只能选 RGB565
|
|
屏rgb888 16.7 兼容 rgb565
|
|
touch GT911
|
|
|
|
Cubemx 改不了hbp vbp 的值,需重新初始化去修改
|
|
|
|
每层的格式为 ARGB8888
|
|
|
|
<!-- {
|
|
/*根据液晶数据手册的参数配置*/
|
|
.hbp = 8, //HSYNC后的无效像素
|
|
.vbp = 2, //VSYNC后的无效行数
|
|
|
|
.hsw = 41, //HSYNC宽度
|
|
.vsw = 10, //VSYNC宽度
|
|
|
|
.hfp = 4, //HSYNC前的无效像素
|
|
.vfp = 4, //VSYNC前的无效行数
|
|
|
|
.comment_clock_2byte = 15, //rgb565/argb4444等双字节像素时推荐使用的液晶时钟频率
|
|
.comment_clock_4byte = 15, //Argb8888等四字节像素时推荐使用的液晶时钟频率
|
|
|
|
.lcd_pixel_width = 480,//液晶分辨率,宽
|
|
.lcd_pixel_height = 272,//液晶分辨率,高
|
|
|
|
} -->
|
|
|
|
****Cubemx 的配置如下, 只有RGB565的配置, 没有RGB888需要的IO配置 ****
|
|
|
|
|
|
添加背光 D7 LTDC_BL
|
|
LTDC_B4 PG12 -- PI4 , cubemx 改 PI4 LTDC_B4
|
|
|LTDC_R0 |LTDC_R1 |LTDC_R2
|
|
|H2 |H3 |H8
|
|
|LTDC_G0 |LTDC_G1 |
|
|
|E5 |E6 |
|
|
|LTDC_B0 |LTDC_B1 |LTDC_B2
|
|
E4 G12 D6 (D6 可能被 NAND2 的Nowait 占用)
|
|
|
|
所有IO 推挽 上拉 VeryHigh
|
|
|
|
LTDC GPIO Configuration
|
|
PI9 ------> LTDC_VSYNC
|
|
PI10 ------> LTDC_HSYNC
|
|
PF10 ------> LTDC_DE
|
|
PA3 ------> LTDC_B5
|
|
PB0 ------> LTDC_R3
|
|
PB1 ------> LTDC_R6
|
|
PG6 ------> LTDC_R7
|
|
PG7 ------> LTDC_CLK
|
|
PC7 ------> LTDC_G6
|
|
PA11 ------> LTDC_R4
|
|
PA12 ------> LTDC_R5
|
|
PH13 ------> LTDC_G2
|
|
PH15 ------> LTDC_G4
|
|
PI0 ------> LTDC_G5
|
|
PI2 ------> LTDC_G7
|
|
PG10 ------> LTDC_G3
|
|
PG11 ------> LTDC_B3
|
|
PG12 ------> LTDC_B4
|
|
PB8 ------> LTDC_B6
|
|
PB9 ------> LTDC_B7
|
|
|
|
PI9 PI10 PI0 PI2
|
|
PF10
|
|
PA3 PA11 PA12
|
|
PB0 PB1 PB8 PB9
|
|
PG6 PG7 PG11 PG10 PG12
|
|
PC7
|
|
PH13 PH15
|
|
|
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_0|GPIO_PIN_2;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
GPIO_InitStruct.Alternate = GPIO_AF14_LTDC;
|
|
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
|
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_10;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
GPIO_InitStruct.Alternate = GPIO_AF14_LTDC;
|
|
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
|
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_11|GPIO_PIN_12;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
GPIO_InitStruct.Alternate = GPIO_AF14_LTDC;
|
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
GPIO_InitStruct.Alternate = GPIO_AF9_LTDC;
|
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_11;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
GPIO_InitStruct.Alternate = GPIO_AF14_LTDC;
|
|
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
|
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_7;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
GPIO_InitStruct.Alternate = GPIO_AF14_LTDC;
|
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_15;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
GPIO_InitStruct.Alternate = GPIO_AF14_LTDC;
|
|
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
|
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_12;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
GPIO_InitStruct.Alternate = GPIO_AF9_LTDC;
|
|
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
|
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
GPIO_InitStruct.Alternate = GPIO_AF14_LTDC;
|
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
|
|
|
|
|
基本参考正点原子,原子的hsw 这些的定义有些问题
|
|
|
|
### GT911 驱动
|
|
|
|
可以参考下野火的 ,有软件IIC 有硬件IIC。 但是野火的软件IIC 有点问题
|
|
硬件iic 可以设置一个值,让前端去轮询, 轮询到执行 Scan 获得坐标
|
|
可以参考
|
|
https://blog.csdn.net/weixin_38411122/article/details/129241223
|
|
https://github.com/oy2n/stm32cube-gt911-dma
|
|
|
|
touch 可以识别到触点了
|
|
|
|
|
|
### 字体 中文 图片
|
|
|
|
Display_char 有点问题
|
|
|
|
### nandFlash NorFlash USB虚拟U盘
|
|
|
|
spiFlash 分区, 配置写入分区
|
|
自己定义在FATFS目录下的文件, 没有被编译 需要改写 user 文件
|
|
|
|
#### FATFS 修改
|
|
1. FATFS/target 目录, 添加 nand_diskio.c nand_diskio.h
|
|
2. FATFS/APP/fatfs.h 引入 nand_diskio.h
|
|
3. FATFS.c MX_FATFS_Init 修改 引入驱动
|
|
引入flash Driver的定义
|
|
|
|
```C
|
|
uint8_t retUSER; /* Return value for USER */
|
|
char USERPath[4]; /* USER logical drive path */
|
|
FATFS USERFatFS; /* File system object for USER logical drive */
|
|
FIL USERFile; /* File object for USER */
|
|
```
|
|
头文件 extern 出去,供外部引用
|
|
|
|
在 MX_FATFS_Init 初始化
|
|
```C
|
|
void MX_FATFS_Init(void)
|
|
{
|
|
/*## FatFS: Link the SD driver ###########################*/
|
|
retSD = FATFS_LinkDriver(&SD_Driver, SDPath);
|
|
/*## FatFS: Link the USER driver ###########################*/
|
|
retUSER = FATFS_LinkDriver(&USER_Driver, USERPath);
|
|
}
|
|
```
|
|
|
|
FATFS_LinkDriver 来自 Middlewares/Third_Party/FatFs/ff_gen_drv.c
|
|
SDPATH UserPath 含有lun 信息, 即盘符 0: 1:
|
|
|
|
4. ffcong.h 磁盘数量定义
|
|
#define _VOLUMES 1
|
|
|
|
5. Middlewares/Third_Party/FatFs/
|
|
|
|
|
|
### 添加文件
|
|
```C
|
|
extern uint8_t retNAND; /* Return value for USER */
|
|
extern char NANDPath[4]; /* USER logical drive path */
|
|
extern FATFS NANDFatFS; /* File system object for USER logical drive */
|
|
extern FIL NANDFile; /* File object for USER */
|
|
```
|
|
nand_diskio.h/.c
|
|
|
|
```C
|
|
|
|
DSTATUS SPIFlash_initialize (BYTE pdrv);
|
|
DSTATUS SPIFlash_status (BYTE pdrv);
|
|
DRESULT SPIFlash_read (BYTE pdrv, BYTE *buff, DWORD sector, UINT count);
|
|
#if _USE_WRITE == 1
|
|
DRESULT SPIFlash_write (BYTE pdrv, const BYTE *buff, DWORD sector, UINT count);
|
|
#endif /* _USE_WRITE == 1 */
|
|
#if _USE_IOCTL == 1
|
|
DRESULT SPIFlash_ioctl (BYTE pdrv, BYTE cmd, void *buff);
|
|
#endif /* _USE_IOCTL == 1 */
|
|
|
|
Diskio_drvTypeDef SPIFlash_Driver =
|
|
{
|
|
SPIFlash_initialize,
|
|
SPIFlash_status,
|
|
SPIFlash_read,
|
|
#if _USE_WRITE
|
|
SPIFlash_write,
|
|
#endif /* _USE_WRITE == 1 */
|
|
#if _USE_IOCTL == 1
|
|
SPIFlash_ioctl,
|
|
#endif /* _USE_IOCTL == 1 */
|
|
};
|
|
|
|
|
|
DSTATUS SPIFlash_initialize (BYTE pdrv )
|
|
{
|
|
Stat = STA_NOINIT;
|
|
return Stat;
|
|
}
|
|
|
|
DSTATUS SPIFlash_status (BYTE pdrv )
|
|
{
|
|
Stat = STA_NOINIT;
|
|
return Stat;
|
|
}
|
|
|
|
|
|
DRESULT SPIFlash_read (BYTE pdrv, BYTE *buff, DWORD sector, UINT count )
|
|
{
|
|
return RES_OK;
|
|
}
|
|
|
|
#if _USE_WRITE == 1
|
|
DRESULT SPIFlash_write (BYTE pdrv, const BYTE *buff, DWORD sector,UINT count)
|
|
{
|
|
|
|
return RES_OK;
|
|
|
|
}
|
|
#endif
|
|
|
|
#if _USE_IOCTL == 1
|
|
DRESULT SPIFlash_ioctl (BYTE pdrv, BYTE cmd, void *buff )
|
|
{
|
|
DRESULT res = RES_ERROR;
|
|
return res;
|
|
}
|
|
#endif
|
|
```
|
|
|
|
前面调用 spiflash
|
|
|
|
```C
|
|
FATFS fs; /* FatFs文件系统对象 */
|
|
FIL fnew; /* 文件对象 */
|
|
FRESULT res_flash; /* 文件操作结果 */
|
|
UINT fnum; /* 文件成功读写数量 */
|
|
BYTE ReadBuffer[1024]={0}; /* 读缓冲区 */
|
|
BYTE WriteBuffer[] = "这是一个测试程序\r\n";
|
|
|
|
// /* 挂载外部flash */
|
|
res_flash = f_mount(&fs,"0:",1);
|
|
log_i(" mout res %d \r\n",res_flash);
|
|
|
|
// /* 如果没有文件系统就格式化创建创建文件系统 */
|
|
if(res_flash == FR_NO_FILESYSTEM)
|
|
{
|
|
log_i("fmount no file system");
|
|
/* 格式化 */
|
|
res_flash=f_mkfs("0:",FM_ANY,0,MyBuffer,4096); // FM_ANY 不能为0
|
|
log_i(" mkfs %d \r\n",res_flash);
|
|
|
|
if(res_flash == FR_OK)
|
|
{
|
|
/* 格式化后,先取消挂载 */
|
|
res_flash = f_mount(NULL,"0:",1);
|
|
/* 重新挂载 */
|
|
res_flash = f_mount(&fs,"0:",1);
|
|
log_i("fmount OK.. %d", res_flash);
|
|
}
|
|
else
|
|
{
|
|
/* 红灯常亮 */
|
|
log_i(" format failure ...res : %d ",res_flash);
|
|
}
|
|
/* 绿灯常亮 */
|
|
// HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, 0);
|
|
}
|
|
else if(res_flash != FR_OK)
|
|
{
|
|
/* 红灯常亮 */
|
|
log_i("fmount failure");
|
|
}
|
|
|
|
/* 打开文件,如果没有文件就创建 */
|
|
res_flash = f_open(&fnew, "0:FatFs.txt", FA_CREATE_ALWAYS | FA_WRITE );
|
|
log_i(" f_open %d \r\n",res_flash);
|
|
if ( res_flash == FR_OK )
|
|
{
|
|
/* 将指定存储区内容写入到文件内 */
|
|
res_flash = f_write(&fnew,WriteBuffer,sizeof(WriteBuffer),&fnum);
|
|
log_i(" f_write %d \r\n",res_flash);
|
|
if(res_flash == FR_OK)
|
|
{
|
|
/* 蓝灯亮 */
|
|
log_i("write file success ... ");
|
|
|
|
}
|
|
else
|
|
{
|
|
/* 不再读写,关闭文件 */
|
|
f_close(&fnew);
|
|
/* 红灯常亮 */
|
|
log_i("write file failure");
|
|
}
|
|
/* 不再读写,关闭文件 */
|
|
f_close(&fnew);
|
|
}
|
|
else
|
|
{
|
|
log_i("write file failure ..... ");
|
|
}
|
|
````
|
|
|
|
NANDFLASH 调用FTL的初始化和读写扇区的函数
|
|
|
|
```C
|
|
FATFS fs; /* FatFs文件系统对象 */
|
|
FIL fnew; /* 文件对象 */
|
|
FRESULT res_flash; /* 文件操作结果 */
|
|
UINT fnum; /* 文件成功读写数量 */
|
|
BYTE ReadBuffer[1024]={0}; /* 读缓冲区 */
|
|
BYTE WriteBuffer[] = "这是一个测试程序\r\n";
|
|
|
|
// /* 挂载外部flash */
|
|
res_flash = f_mount( &fs,"1:",1);
|
|
// log_i(" mount res %08X \r\n",NAND_ReadID());
|
|
log_i(" mount res %d \r\n", res_flash);
|
|
|
|
// /* 如果没有文件系统就格式化创建创建文件系统 */
|
|
if(res_flash == FR_NO_FILESYSTEM)
|
|
{
|
|
log_i("fmount no file system");
|
|
/* 格式化 */
|
|
res_flash=f_mkfs("1:",FM_ANY,0,MyBuffer,_MIN_SS); // FM_ANY 不能为0
|
|
if(res_flash == FR_OK)
|
|
{
|
|
log_i(" mkfs format ok ! " );
|
|
// 格式化后,先取消挂载 /
|
|
res_flash = f_mount(NULL,"1:",1);
|
|
// 重新挂载
|
|
res_flash = f_mount(&fs,"1:",1);
|
|
log_i("fmount OK.. %d", res_flash);
|
|
}
|
|
else
|
|
{
|
|
log_i(" format failure .... %d ",res_flash);
|
|
}
|
|
}
|
|
else if(res_flash != FR_OK)
|
|
{
|
|
// 红灯常亮
|
|
log_i("fmount failure");
|
|
}
|
|
|
|
/* 打开文件,如果没有文件就创建 */
|
|
res_flash = f_open(&fnew, "1:FatFs.txt", FA_CREATE_ALWAYS | FA_WRITE );
|
|
log_i(" f_open %d \r\n",res_flash);
|
|
if ( res_flash == FR_OK )
|
|
{
|
|
/* 将指定存储区内容写入到文件内 */
|
|
res_flash = f_write(&fnew,WriteBuffer,sizeof(WriteBuffer),&fnum);
|
|
log_i(" f_write %d \r\n",res_flash);
|
|
if(res_flash == FR_OK)
|
|
{
|
|
/* 蓝灯亮 */
|
|
log_i("write file success ... ");
|
|
}
|
|
else
|
|
{
|
|
/* 不再读写,关闭文件 */
|
|
f_close(&fnew);
|
|
/* 红灯常亮 */
|
|
log_i("write file failure");
|
|
}
|
|
/* 不再读写,关闭文件 */
|
|
f_close(&fnew);
|
|
}
|
|
else
|
|
{
|
|
log_i("write file failure ..... ");
|
|
}
|
|
```
|
|
|
|
#### USB 虚拟U盘的修改
|
|
/USB_DEVICE/App/usbd_storage_if.h
|
|
/USB_DEVICE/App/usbd_storage_if.c
|
|
|
|
HS FS
|
|
修改盘大小的参数, 读写盘的参数
|
|
|
|
MX_USB_DEVICE_Init()放任务中
|
|
|
|
spiFLASH 需要考虑总的扇区的偏离
|
|
nandflash 无需去考虑扇区的偏离
|
|
|
|
```C
|
|
#define STORAGE_LUN_NBR 2
|
|
#define SPIFLASH_BLK_NBR 0x1700 // 5888*4096 23M, 扣除7M 25M, 扣2M文件系统
|
|
#define SPIFLASH_BLK_SIZ 0x1000
|
|
#define NANDFLASH_BLK_NBR 0x800000 // 有效扇区? 有效block 952*2048= 0x1DC000, *4 = 0x770000,
|
|
#define NANDFLASH_BLK_SIZ 0x0200 // page大小 0x800 2048 byte,还是Sector大小 512 0x200
|
|
```
|
|
|
|
以上 Flash 只有5.73M ,原因暂未查
|
|
|
|
### lvgl |