⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash.txt

📁 flash 的驱动, 很不错的! 可以看一看.
💻 TXT
字号:

/*************************************************************************************************/
//                 flash的分配
//
// 编程日志     第       0    -     9  扇区(10)
// 报警日志     第      10    -    19  扇区(10)
// 操作日志     第      20    -    29  扇区(10)
// 任务         第      30    -  7069  扇区(64 *110 = 7040)
// 其它数据     第    7070    -  7679  扇区(用来存放别的数据)
// 备份区       第    7680    -  8126  扇区(要是以上的扇区坏了就从这个备份区中找一个好的扇区映射过去)
// 文件索引区   第    8128    -  8191  扇区(64个扇区, 主文件索引表8128 - 8159(32个扇区), 从文件索引表达式8160 - 8191(32个扇区), 只要文件索引区中有一个扇区是坏的就认为这个flash不可用)
//
//    每个文件索引项是两个字节的长度.
//     
//    文件索引表分为主文件索引表和从文件索引表, 
//    如果主文件索引坏了,则用从文件索引表
//    
//    flash一共有8192个扇区, 每个扇区对应一个文件索引项, 每个文件索引项占用两个字节, 而每个扇区最大的容量是512个字节,
//    则文件索引表所在占用的扇区的个数为:
//    8192 * 2 / 512 = 32 个扇区
//    
//    
//    文件索引项描述符
//    --------------------------------------------------
//    |    15    |      14     |      13 - 0           |
//    |----------|-------------|-----------------------|
//    |    0     |      0      |  对应扇区的编号       |
//    |----------|-------------|-----------------------|
//
//
//    备份区对应的文件索引项描述符
//    --------------------------------------------------
//    |    15    |      14     |      13 - 0           |
//    |----------|-------------|-----------------------|
//    |使用标志  |  好坏标志   |  对应扇区的编号       |
//    |----------|-------------|-----------------------|
//    | 0:未用   |0 :  好      |                       |
//    | 1:已用   |1 :  坏      |                       |
//    --------------------------------------------------
//
//
/*************************************************************************************************/

1:  unsigned int mk_fs_flash(void)

//建立文件系统
//刚开始时认为每个扇区都是好的.
//因此将文件索引表中的每一项都指向每一个扇区(第i项指向第i个扇区,如: 第0项的值为0x0, 第1项的值为0x1, 第2项的值为0x2)
//建立主从文件索引表, 主文件索引表从第8128 - 8159扇区(32个扇区), 从文件索引表从8160 - 8191个扇区(32个扇区),
//只要文件索引区(8128 - 8191)中有一个扇区是坏的就认为这个flash不可用

//变量: file_index_startblock 表示文件系统的所在位置的起始扇区
//返回值如果为DATAFLASH_OK(0x1)就认为是成功
//否则返回DATAFLASH_BUSY(0x0) 或 DATAFLASH_ERROR(0x2)



2:   unsigned int check_mk_fs(void)
//这个函数是为了测试用的,为了测试mk_fs_flash()建立的文件索引表是不是真的写对了.
//
//检验建立的文件系统是否是正确的
//返回值如果不为DATAFLASH_OK就认为是错的



3:  unsigned int read_fs_index(unsigned char *fs_buf, unsigned int block_number)
//功能:
//      读文件索引表中指定的扃区
//参数:
//      fs_buf:  将要读出来的内容存放在这个缓冲区中
//      block_number:   是指要读的文件索引表的扇区号, block_number = 0 ,表示读文件索引表的第0个扇区,也就是读第8128个扇区.
//      block_number = i ,表示读文件索引表的第i个扇区,也就是读flash的第 8128 + i 个扇区
//      先从主文件索引表读出当前的扇区
//      如果读出成功(能正常的读出来,并且算出的cs和它原来的cs相等),则返回 1
//      否则续继读从文件索引表相应的扃区
//      如果读出成功(能正常的读出来,并且算出的cs和它原来的cs相等),则返回 1
//      否则返回0


4:   unsigned int write_fs_index(unsigned char *fs_buf,unsigned int block_number)
//功能:
//       写文件索引表中的扇区
//      block_number:   是指要写的文件索引表的扇区号, block_number = 0 ,表示写文件索引表的第0个扇区,也就是写第8128个扇区.
//      block_number = i ,表示写文件索引表的第i个扇区,也就是写flash的第 8128 + i 个扇区
//      先写主文件索引表相应的扇区
//      再写从文件索引表相应的扇区
//      如果有一个以上能写成功则返回 1
//      否则返回0


5:   unsigned int read_flash_block(unsigned char *buf, unsigned int block_number)
//读flash的一个扇区
//buf:             将读出来的内容存放在这个缓冲区中
//block_number:    要读的扇区号
//成功则返回DATAFLASH_OK (0x1)
//否则返回0x0 或 0x2


6:  unsigned int write_flash_block(unsigned char *buf, unsigned int block_number)
//写flash的一个扇区
//buf:              要写的内容
//block_number:     要写到哪一个扇区中去
//成功则返回    DATAFLASH_OK (0x1)
//否则返回      DATAFLASH_BUSY(0x0) 或 DATAFLASH_ERROR(0x2)  或 0x3(写时校验出错)
//具体流程:
//        等待就绪,如果在一段的时间内没有就绪则错误返回
//        写flash.如果写不成功,则返回
//        等待就绪,如果在一段的时间内没有就绪则错误返回
//        发一个校验命令,如果不成功如果不一样, 不成功则错误返回
//        比较要写的内容和已写的内容是不是一样, 不一样则错误返回



7:     unsigned int find_empty_block(void)
/功能:
//        从备份区(7680 - 7679)中找出一块好的未用的扇区
//        它对应于文件索引表中的第30块扇区所有的数据项(0 - 255)
//        和第31块扇区中的第0 - 191项(192 - 255  这64项对应于文件表所占用的扇区)
//返回值:
//         如果能找到则将这个扇区置为已用,返回这个块扇区的编号
//         否则返回0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -