问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何提高mtd写flash频率

发布网友 发布时间:2022-05-16 18:11

我来回答

1个回答

热心网友 时间:2023-11-16 02:39

参看高手说在应用里要 system("flash_eraseall /dev/mtd4");spi_fd =open("/dev/mtd4",O_RDWR, 0);
这么调用,而mtd4在哪里注册的我就不知道了。现在还在寻找中。read和write都是调用到了m25p80.c里函数。下面具体说一下如何添加m25p80.c驱动吧。
步骤如下:
1、make menuconfig里选择MTD/下相应的选项。内核已经配好了。
2、修改arch/arm/mach-davinci下面的davinci_spi_platform.c 在里面加入
static struct flash_platform_data davinci_m25P40_info =
{
.name = "m25p80",
.parts = NULL,
.nr_parts = 0,
.type = "m25p40",
};
static struct spi_board_info dm6467_spi_board_info[] = {
{
// SPI FLash
.modalias = "m25p80",
.platform_data = &davinci_m25P40_info,
.mode = SPI_MODE_0,
.irq = 0,
.max_speed_hz = 4 * 1000 * 1000, /*4MHZ*/
.bus_num = 0,
.chip_select = 0, // device number on bus (0-based)
},
};

然后编译重新编译内核之后就可以发现在dev目录下多了一个dev/mtd4设备节点。这里面有很多奇怪的地方。不知道这个mtd4是怎么生成的。像那个spidev0.0设备节点是因为在文件spidev.c里有赋值给主设备和从设备的地方,而这个在m25p80.c里并没有发现任何迹象,只是看到在probe里加进了add_mtd_partitions()函数,还有这样的语句:
flash->mtd.erase = m25p80_erase;
flash->mtd.read = m25p80_read;
flash->mtd.write = m25p80_write;
然后继续查找probe最后到了那里:
static struct spi_driver m25p80_driver = {
.driver = {
.name = "m25p80",
.bus = &spi_bus_type,
.owner = THIS_MODULE,
},
.probe = m25p_probe,
.remove = __devexit_p(m25p_remove),
};
貌似这里又用probe来注册了spi_driver结构体。而最后的init和exit函数都用了spi注册。晕倒!那怎么最后是open设备mtd4呢。这中间到底发生了什么?
这里只能说mtd设备利用了spi总线来达到注册自己设备的目的。而这个mtd设备在本质上是一个字符设备。
在板子登陆的内核信息里截获到以下信息:
call video_register_device() in file videodev.c
call video_register_device() in file videodev.c
call adv7343_initialize()
ad9889_i2c_init() OK!
i2c /dev entries driver
nand_davinci nand_davinci.0: Using soft ECC
info->emifregs = 0xc8008000,EMIF_A1CR = 0x3ffffffc
info->emifregs = 0xc8008000,EMIF_A1CR = 0x88442a8
/*****************************************************************************/
mtd->writesize(pagesize)=2048
mtd->oobsize=64
mtd->erasesize(blocksize)=0x20000
/*****************************************************************************/
NAND device: Manufacturer ID: 0xec, Chip ID: 0xf1 (Samsung NAND 128MiB 3,3V 8-bit)
Scanning device for bad blocks
chip_delay = 30
Creating 4 MTD partitions on "nand_davinci.0":
0x00000000-0x000e0000 : "bootloader"
0x000e0000-0x00100000 : "params"
0x00100000-0x004a0000 : "kernel"
0x004a0000-0x08000000 : "filesystem"
nand_davinci nand_davinci.0: hardware revision: 2.2
Enter into m25p_probe
m25p80 spi0.0: m25p40 (512 Kbytes)
dm_spi.0: davinci SPI Controller driver at 0xc8002800 (irq = 43) use_dma=1
pcf8563 0-0051: chip found, driver version 0.4.2
上面的Enter into m25p_probe 是在m25p80.c里probe函数打印出来的。这么早就打印了而不是open时候才调用probe是在内核加载时就调用了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
爱情的句子高质量文案句子 干妹妹对我"久伴你"是什么意思 陪她一辈子的文案汇总123句 蜂窝移动通信笔记2——调制 通信系统的带宽和频率分析 汽车座椅头枕应该调到什么位置 老面馒头和酵母馒头的区别 老面馒头与酵母馒头哪个好 2024财富中国500强最赚钱40家公司揭晓 2024中国500强盈利排名榜一览 2024全球银行1000强中国名单2024世界银行1000强中国哪些上榜 品牌榜:2024年中国十大银行排行榜 投票结果公布【新】 Dior的包包的每个系列什么Miss Dior, Lady dior从外观上怎么区分? 请求帮助,keil创建UCOS2.89工程,每一步操作都写下来 蠕读什么字 迪奥的lady 包包要多少钱正品 迪奥lady包包的问题 为什么Diorlady包包没有底部的铆钉 八点品牌设计公司的核心理念 品牌设计的核心在哪里? 无味 无谓 也无畏 懂事 懂适 也懂世什么意思 只要眼神到位就无谓无畏 这话什么意思 灌香肠的肠衣破了一点,肉也露出一点了,这样会坏吗 灌肠 煮破了 一条路走到黑,无味无谓也无畏什么意思 《山海经》中是谁诛 杀了九九怪 长笛垫子的肠衣破了,要换吗? 新罐的香肠有的肠衣坏了一点有影响吗? 无谓无畏无味什么意思 煮香肠为什么肠衣爱破 肠衣破了很多可以在外面重新灌肠衣吗,会不会影响口感? 灌香肠后拿回家却发现肠衣破了一节,会臭吗? 哪位大虾知道,Dior lady三格包包香港什么价格啊? chip probe和final test的区别 详细叙说在Eclipse上使用jbdc-odbc开发SQL Server数据库应用软件的操作步骤 蠕字的音序是 ladyDior五格怎么样? probeset怎么翻译!求高手指点! 怎么将正整数划分数的各个结果过程打印出来,利用分治法和递归 简体字:蠕 繁体字:蠕/是什么意思 Lady Dior包包的颜色尺寸与价格有哪些 顶峰式的动作 练瑜伽顶峰式腿会发抖什么原因 蠕字怎么组词? 涩,蠕,萃,涸粪这几个字怎么读 C语言不同文件中的函数调用? ladypeach是什么牌子包包? c语言不同文件函数怎么分配 A2驾驶证司机一个月多少工资 Lady Dior包包在美国,香港,*的价钱差别?特别需要知道美国的价钱。 如何又安全又优雅地将瑜伽体式做到极致呢? a2驾照一般可拿多少工资