nandflash驱动的读写操作实现过程
2013-08-11 01:45
323 查看
韦东山的视频讲了nandflash驱动的初始化过程,但是没有讲 '发生 ' 读 系统调用'时 驱动的硬件操作过程.
我找了半天也没找到相关的读写硬件操作在哪里.
因为太晚了,先在这里记点笔记.打个开头.
---------------------------------------------------------------------------------------------------------
首先韦东山的例程里没有设置nand_chip 结构体的 read_byte 等成员.
所以会在nand_scan()--->nand_set_defaults()中设置
if (!chip->read_byte)
chip->read_byte = busw ? nand_read_byte16 : nand_read_byte;
---------------------------------------------------------------------------------------------------------
在nand文件夹查找cmd_ctrl的调用,会发现,cmd_ctrl使用了以NAND_CMD_开头的宏
这些宏对应了芯片的硬件操作命令.
读系统调用要操作硬件必须使用这些宏,那么找一个例子来搜索
NAND_CMD_READSTART
但是并没有什么发现,这个宏还是在命令相关的函数中使用..
在Sh_flctl.c中,有很多类似这样的函数
flctl_cmdfunc
if (flctl->page_size) {
set_cmd_regs(mtd, command, (NAND_CMD_READSTART << 8)
| NAND_CMD_READ0);
set_addr(mtd, mtd->writesize, page_addr);
---------------------------------------------------------------------------------------------------------
再看chip->cmdfunc = nand_command;
chip->cmd_ctrl(mtd, page_addr, ctrl);
ctrl &= ~NAND_CTRL_CHANGE;
chip->cmd_ctrl(mtd, page_addr >> 8, ctrl);
/* One more address cycle for devices > 32MiB */
---------------------------------------------------------------------------------------------------------
虽然不知道具体调用哪个函数,但是应该是把需要操作的命令存在 int command中,第二周期的命令左移8位保存
然后再调用nand_chip 的读写函数
太晚了..眼睛痛,,明天继续
我找了半天也没找到相关的读写硬件操作在哪里.
因为太晚了,先在这里记点笔记.打个开头.
---------------------------------------------------------------------------------------------------------
首先韦东山的例程里没有设置nand_chip 结构体的 read_byte 等成员.
所以会在nand_scan()--->nand_set_defaults()中设置
if (!chip->read_byte)
chip->read_byte = busw ? nand_read_byte16 : nand_read_byte;
---------------------------------------------------------------------------------------------------------
在nand文件夹查找cmd_ctrl的调用,会发现,cmd_ctrl使用了以NAND_CMD_开头的宏
这些宏对应了芯片的硬件操作命令.
读系统调用要操作硬件必须使用这些宏,那么找一个例子来搜索
NAND_CMD_READSTART
但是并没有什么发现,这个宏还是在命令相关的函数中使用..
在Sh_flctl.c中,有很多类似这样的函数
flctl_cmdfunc
if (flctl->page_size) {
set_cmd_regs(mtd, command, (NAND_CMD_READSTART << 8)
| NAND_CMD_READ0);
set_addr(mtd, mtd->writesize, page_addr);
---------------------------------------------------------------------------------------------------------
再看chip->cmdfunc = nand_command;
chip->cmd_ctrl(mtd, page_addr, ctrl);
ctrl &= ~NAND_CTRL_CHANGE;
chip->cmd_ctrl(mtd, page_addr >> 8, ctrl);
/* One more address cycle for devices > 32MiB */
---------------------------------------------------------------------------------------------------------
虽然不知道具体调用哪个函数,但是应该是把需要操作的命令存在 int command中,第二周期的命令左移8位保存
然后再调用nand_chip 的读写函数
太晚了..眼睛痛,,明天继续
相关文章推荐
- linux 内核驱动加载过程中 向文件系统中的文件进行读写操作
- Python实现的简单读写csv文件操作示例
- Delphi 的接口机制——接口操作的编译器实现过程(1)
- 使用纯C++实现SQL Server2005 数据库读写操作详细步骤
- MongoDB学习笔记(二) 通过samus驱动实现基本数据操作
- linux 高级字符设备驱动 ioctl操作介绍 例程分析实现
- 设备驱动中环形缓冲区数据存储和读写同步的实现[转自:http://hi.baidu.com/whandsome/blog/item/3834e32a9994692cd52af1f9.html]
- java实现简单的IO字节流读写操作
- 单元测试、自动化测试、接口测试过程中的Excel数据驱动(java实现)
- 实现动态的XML文件读写操作(依然带干货)
- 库函数文件,创建、打开、读写、删除、操作实现
- 设备驱动中环形缓冲区数据存储和读写同步的实现
- 基于MTD的NANDFLASH设备驱动底层实现原理分析(二)
- MongoDB学习笔记(二) 通过samus驱动实现基本数据操作
- mmc驱动的读写过程解析
- 基于smdk2410 开发板u-boot-1.2.0 nand flash读写操作及其命令的实现
- Delphi 的接口机制——接口操作的编译器实现过程(2)
- MySQL的C++封装实现数据库的创建,表的创建,数据库的读写操作
- 基于MTD的NANDFLASH设备驱动底层实现原理分析 一
- 和菜鸟一起学linux总线驱动之初识smartcard操作过程