这两天正在研究TFFS,希望感兴趣的朋友多多交流!
自己写MTD真是很烦,驱动倒是容易,但是要正确挂上去就很费事,很多小地方都要顾及。我现在还没有搞清楚它里面那个map window,是不是在内存是开辟了一块来映射flash?还有在FLFlash结构中的“FLStatus (*write)(FLFlash *, CardAddress, const void FAR1 *, int, int);”第二个参数CardAddress倒底传的是相对物理地址的偏移还是块地址?
另我的flash是16位一片的,一次写操作就是2个字节,如果先写奇数个bytes(如3bytes),再写2个bytes,就会在第一次和第二次写的单元之间出现一个无效的字节,我不知道tffs会不会处理这样的情况? 而vxworks自己提供的驱动则是针对一个byte或者是二个8位的芯片组成一个16宽度的芯片,因为可以分开操作所以不存在我所说的那种情况。
不知道各位高手对此有何看法?
[align=right][color=#000066][此贴子已经被seasoblue于2002-9-26 21:22:50编辑过][/color][/align]
我曾在s3c4510b上试过一次:S3C4510B一共有4组针对flash的字节写使能nWBE[0-3],当把指向16位宽度的flash的指针强制转化成8位的指针写操作时,用示波器观察发现只有nWBE0(低8位)有效!并且我看了/tffs/amdtmd.c中amdMTDWrite()函数,发现它也是按这种方式处理的,即如果是vol.interleaving == 2(我理解interleaving为8位flash组成总线宽度的片数,不知道对否?),则按16位模式进行写,当发现只剩一个字节的时候则跳到vol.interleaving == 1(其实就是强制转化写指针为8位模式再写)执行。但下一次写怎么办呢?在MTD层好象要排除空一个字节的错误好象很难!
里面还有一些概念我还没有完全搞清楚,如它是怎么map window的?我用一片16位宽度的flash时,interleavin该设成1,还是2?FLFlash中noOfChips是指芯片数还是芯片编号?
我现在正在调试MTD程序,等我排除掉一些低级错误,有一定结果(不管是好的还是坏的)时再把程序发给你。
谢谢!
现在系统起来后,我在host端的shell下键入如下命令:
Copyright 1995-1999 Wind River Systems, Inc.
C++ Constructors/Destructors Strategy is AUTOMATIC
-> i
NAME ENTRY TID PRI STATUS PC SP ERRNO DELAY
---------- ------------ -------- --- ---------- -------- -------- ------- -----
tExcTask _excTask ffab20 0 PEND 57934 ffaa54 0 0
tLogTask _logTask ff8204 0 PEND 57934 ff8138 0 0
tWdbTask 0x3d308 e1152c 3 READY 9d80 e1145c 0 0
tNetTask _netTask fb72ac 50 READY 793c fb713c 0 0
tTffsPTask _flPollTask ff4698 100 DELAY 1643c ff461c 0 4
value = 0 = 0x0
-> tffsShowAll
TFFS Version 2.0
[color=#6495ED]Debug: entering SST MTD identification routine.
unlockAddr1 = 0x610aaaa, unlockAddr1 = 0x6105554
flashPtr = 0x6100000
offSet = 0x6100002
vol.type = 0x2782
Debug: Identified sst39vf160 media.[/color]
[color=#DC143C]0: socket=RFA: type=0x2782, unitSize=0x1000, mediaSize=0x0[/color]value = 44 = 0x2c = ','
-> tffsDevFormat 0,0
就没有反应了!蓝色的信息是tffsShowAll调用我在MTD层写的sstMTDIndentify函数得到的值,都是正确的,但红色信息中的mediaSize = 0,好象有问题。我可以提供相关代码,大家能否帮我分析一下?谢谢!
[align=right][color=#000066][此贴子已经被seasoblue于2002-9-29 9:52:21编辑过][/color][/align]
现在已经有进展了。我修改了部分sst39VF160MTD代码,在执行tffsDevFormat(0,0)后打印出如下信息:
-> sysTffsFormat
Debug: entering SST MTD identification routine.
unlockAddr1 = 0x610aaaa, unlockAddr1 = 0x6105554
flashPtr = 0x6100000
offSet = 0x6100002
vol.type = 0x2782
Debug: Identified sst39vf160 media.
Debug: entering SST MTD identification routine.
unlockAddr1 = 0x610aaaa, unlockAddr1 = 0x6105554
flashPtr = 0x6100000
offSet = 0x6100002
vol.type = 0x2782
Debug: Identified sst39vf160 media.
firstBlock = 0x0, numOfBlock = 0x10
ERASE: flashPtr = 0x6100000
ERASE: flashPtr = 0x6101000
ERASE: flashPtr = 0x6102000
ERASE: flashPtr = 0x6103000
ERASE: flashPtr = 0x6104000
ERASE: flashPtr = 0x6105000
ERASE: flashPtr = 0x6106000
ERASE: flashPtr = 0x6107000
ERASE: flashPtr = 0x6108000
ERASE: flashPtr = 0x6109000
ERASE: flashPtr = 0x610a000
ERASE: flashPtr = 0x610b000
ERASE: flashPtr = 0x610c000
ERASE: flashPtr = 0x610d000
ERASE: flashPtr = 0x610e000
ERASE: flashPtr = 0x610f000
firstBlock = 0x10, numOfBlock = 0x10
ERASE: flashPtr = 0x6110000
ERASE: flashPtr = 0x6111000
.........
.........
ERASE: flashPtr = 0x62fe000
ERASE: flashPtr = 0x62ff000
Debug: entering SST MTD identification routine.
unlockAddr1 = 0x610aaaa, unlockAddr1 = 0x6105554
flashPtr = 0x6100000
offSet = 0x6100002
vol.type = 0x2782
Debug: Identified sst39vf160 media.
value = -1 = 0xffffffff
可以看出:擦除是成功了的(从0x6100000到0x6300000一共2M字节)。但后面有问题,因为返回值是-1。我不太清楚在擦除整修芯片后tffsDevFormat()又干了些什么,现在无从查起了。:(,不知各位有何高见?
我在shell里直接就是tffsDevFormat,之前什么命令也没有用,不知是不是少了?因为我想tffsDrv()之类已经在定义了INCLUDE_TFFS后已经运行了。[em21][em21]
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |