echo 1 > /sys/devices/platform/leds-gpio/leds/tp-link:green:lan1/brightness //亮
echo 0 > /sys/devices/platform/leds-gpio/leds/tp-link:green:lan1/brightness //灭
|
这个库中没有任何关于文件系统的代码,(QQ:243786753原创作品,转载请注明出处)即文件系统的实现都是由操作系统完成的,这个库中只需要对操作系统发过来的读取与写入命令负责即可。
库中的mass_mal.c为文件系统与存储介质的访问接口(Medium Access Layer interface),负责将文件存储在实际的介质上,如NAND-Flash,SD卡等
我们需要把文件存储在STM32的内部Flash中,因此更改这里的接口即可
mass_mal提供了四个函数
u16 MAL_Init (u8 lun); //初始化介质,由于是内部Flash,为了能写入,只需Unlock FLASH
u16 MAL_GetStatus (u8 lun); //读取介质的参数,页大小,总页数,以及总大小,这个视STM32的内Flash情况而定,为文件系统format介质提供依据
u16 MAL_Read(u8 lun, u32 Memory_Offset, u32 *Readbuff, u16 Transfer_Length); //读取介质上的一块区域
u16 MAL_Write(u8 lun, u32 Memory_Offset, u32 *Writebuff, u16 Transfer_Length); // 写入介质上的一块区域
读写操作的Memory_Offset是从零偏移开始的,用作U盘的STM32内部Flash需要从代码之后开始
原作都说编译结束后代码在0x0800252B,取mini U盘开始地址为0x08003000
STM32F103C8T6,Flash为64K,还剩余52K即0xD000,每一页为1K
根据以上信息,(QQ:243786753原创作品,转载请注明出处)打开STM32_USB-FS-Device_Lib_V4.0.0\Projects\Mass_Storage\src\mass_mal.c
添加FLASH的定义:
#define FLASH_START_ADDR 0x08008800 // Flash起始地址,为了保留更多的代码空间,这个地址比原文更靠后
#define FLASH_SIZE 30*1024 // 30K 大小,因为起始地址改了,所以这里也相应的改了
#define FLASH_PAGE_SIZE 1024 // 1K per page
#define FLASH_WAIT_TIMEOUT 100000
|
uint16_t MAL_Init(uint8_t lun)
{
FLASH_Unlock();
return
lun == 0 ? MAL_OK : MAL_FAIL;
}
uint16_t MAL_Write(uint8_t lun, uint32_t Memory_Offset, uint32_t *Writebuff, uint16_t Transfer_Length)
{
if
(lun == 0){
uint16_t i;
for
( i=0; i<Transfer_Length;i+=FLASH_PAGE_SIZE){
if
(FLASH_WaitForLastOperation(FLASH_WAIT_TIMEOUT)!=FLASH_TIMEOUT){
FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
}
|