主题 : 请教:在mini2440开发板上如何实现nand编程操作 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 3527
精华: 0
发帖: 11
金钱: 110 两
威望: 110 点
综合积分: 22 分
注册时间: 2009-01-16
最后登录: 2017-09-13
楼主  发表于: 2009-02-10 12:25

 请教:在mini2440开发板上如何实现nand编程操作

我要编程实现对数据的存储,存储在nand的空闲地址。我看了下nand驱动文件( kernel-2.6.13/driver/mtd/nand/s3c2410.c), s3c2410.c中没有和上层软件的接口,怎么编程实现对nand的读写功能??
其他的驱动文件,比如led,驱动中都有文件结构体,有open,write,read,ioctl等和上层接口函数,操作的时候通过open打开设备文件,再根据接口函数对设备操作。对于nand设备,s3c2410.c中没有文件结构体,也没有相应的接口函数,编程怎么实现??难道不需要修改驱动文件就可以对nand操作?
我看了下i2c设备也一样 (kernel-2.6.13/drivers/i2c/busses/i2c-s3c2410.c),没有接口函数怎么编程实现?

希望高手指点!
级别: 新手上路
UID: 3527
精华: 0
发帖: 11
金钱: 110 两
威望: 110 点
综合积分: 22 分
注册时间: 2009-01-16
最后登录: 2017-09-13
1楼  发表于: 2009-02-11 08:56
我自己顶。
简单的说,对于开发板中的nand,上层软件中如何保存数据到nand,也就是调用哪些函数来实现?
我是个新手,望高手指点!
级别: 新手上路
UID: 3527
精华: 0
发帖: 11
金钱: 110 两
威望: 110 点
综合积分: 22 分
注册时间: 2009-01-16
最后登录: 2017-09-13
2楼  发表于: 2009-02-13 12:34
问题解决!
我考虑的太多了,nand属于块设备,它之上的接口是文件系统, 因此直接操作文件就可以了. 不必理会底层nand 驱动.
而led属于字符设备,所以会有些区别。
操作nand的时候按文件操作即可,open,write,read。需要注意的是最好对nand多分一个区,用于数据存储。

参考代码:
void main()
{
int  fd;
unsigned char databuf[512];
int i;

for(i=0;i<512;i++)
databuf=i;

open("/dev/mtdblock/3",O_RDWR);       /*我把nand多分了一个区mtdblock3,用于数据存储*/

write(fd,(unsigned char *)databuf,512);    /*因该是从分区的第一个字节开始存储,怎么设置存储地址?还不清楚*/

for(i=0;i<1000;i++)                         /*读写之间要有一定间隔,否则会出错*/

for(i=0;i<512;i++)
databuf=0;

read(fd,(unsigned char *)databuf,512);
}
级别: 新手上路
UID: 2323
精华: 0
发帖: 18
金钱: 100 两
威望: 31 点
综合积分: 36 分
注册时间: 2008-11-11
最后登录: 2015-06-01
3楼  发表于: 2009-02-13 15:34
向楼主学习来了,呵呵。