搜索
bottom↓
回复: 6

SPI FLASH 驱动中 RT_DEVICE_CTRL_BLK_GETGEOME 命令如何返回参数

[复制链接]

出0入0汤圆

发表于 2011-2-14 21:21:09 | 显示全部楼层 |阅读模式
环境:  RTT 0.3.1 + Keil
MCU:   STM32F101VC
Flash: S25FL064K (8Mbytes)

    在ST函数库中M25P64驱动上修改,单独测试,可擦可读可写。装载文件系统是执行mkfs("spi0")失败,查看相关帖子,貌似是几何参数返回错误,导致devfs报FR_MKFS_ABORTED错误。刚接触,不懂,求救如何调整。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

        RT_ASSERT(dev != RT_NULL);
               
        if (cmd == RT_DEVICE_CTRL_BLK_GETGEOME) {
                struct rt_device_blk_geometry *geometry;

                geometry = (struct rt_device_blk_geometry *)args;
                if (geometry == RT_NULL) return -RT_ERROR;
               
                geometry->bytes_per_sector = 4096; // 512
                geometry->sector_count = 512; // 4096
                geometry->block_size = 4096; /* block erase: 4k */
        }
       
        return RT_EOK;

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

\ | /
- RT -     Thread Operating System
/ | \ 0.3.1 build Feb 14 2011
2006 - 2010 Copyright by rt-thread team
FLASH TYPE : S25FL064K
SPI File System initialized!
finsh>>list()
--Function List:
list_mem         -- list memory usage information
ls               -- list directory contents
mkdir            -- make a directory
rm               -- remove files or directories
cat              -- print file
mkfs             -- make filesystem on disk
hello            -- say hello world
version          -- show RT-Thread version information
list_thread      -- list thread
list_sem         -- list semaphone in system
list_event       -- list event in system
list_mutex       -- list mutex in system
list_mailbox     -- list mail box in system
list_msgqueue    -- list message queue in system
list_mempool     -- list memory pool in system
list_timer       -- list timer in system
list_device      -- list device in system
list             -- list all symbol in system
--Variable List:
dummy            -- dummy variable for finsh
        0, 0x00000000
finsh>>mkfs("spi0")
format error
        -22, 0xffffffea

点击此处下载 ourdev_616105R8QKPE.zip(文件大小:7K) (原文件名:stm32_eval_spi_flash.zip)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-2-14 22:09:02 | 显示全部楼层
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4517922
用这个程序先测试一下.

出0入0汤圆

 楼主| 发表于 2011-2-15 09:32:34 | 显示全部楼层
个人使用RTT 0.3.1 版本,在修改以下两宏之后,mkfs("spi0")似乎仍然不行
1、ffconf.h
    #define _MAX_SS    512    => #define _MAX_SS    4096
1、ff.c
    #define MIN_SECTOR 2000UL => #define MIN_SECTOR 512UL
    /* Minimum partition size */


\ | /
- RT -     Thread Operating System
/ | \ 0.3.1 build Feb 14 2011
2006 - 2010 Copyright by rt-thread team
FLASH TYPE : S25FL064K
SPI File System initialized!
finsh>>list()
--Function List:
led              -- set led[0 - 1] on[1] or off[0].
device_test      -- e.g:device_test("sd0")
erase_chip       -- hello!
read_1sector     -- hello!
list_mem         -- list memory usage information
ls               -- list directory contents
mkdir            -- make a directory
rm               -- remove files or directories
cat              -- print file
mkfs             -- make filesystem on disk
hello            -- say hello world
version          -- show RT-Thread version information
list_thread      -- list thread
list_sem         -- list semaphone in system
list_event       -- list event in system
list_mutex       -- list mutex in system
list_mailbox     -- list mail box in system
list_msgqueue    -- list message queue in system
list_mempool     -- list memory pool in system
list_timer       -- list timer in system
list_device      -- list device in system
list             -- list all symbol in system
--Variable List:
dummy            -- dummy variable for finsh
        0, 0x00000000
finsh>>read_1sector()
00000000: 8080 8080 8080 8080 8080 8080 8080 8080
00000010: 8080 8080 8080 8080 8080 8080 8080 8080
00000020: 8080 8080 8080 8080 8080 8080 8080 8080
00000030: 8080 8080 8080 8080 8080 8080 8080 8080
00000040: 8080 8080 8080 8080 8080 8080 8080 8080
00000050: 8080 8080 8080 8080 8080 8080 8080 8080
00000060: 8080 8080 8080 8080 8080 8080 8080 8080
00000070: 8080 8080 8080 8080 8080 8080 8080 8080
00000080: 8080 8080 8080 8080 8080 8080 8080 8080
00000090: 8080 8080 8080 8080 8080 8080 8080 8080
000000a0: 8080 8080 8080 8080 8080 8080 8080 8080
000000b0: 8080 8080 8080 8080 8080 8080 8080 8080
000000c0: 8080 8080 8080 8080 8080 8080 8080 8080
000000d0: 8080 8080 8080 8080 8080 8080 8080 8080
000000e0: 8080 8080 8080 8080 8080 8080 8080 8080
000000f0: 8080 8080 8080 8080 8080 8080 8080 8080

        0, 0x00000000
finsh>>mkfs("spi0")
        0, 0x00000000
finsh>>read_1sector()
00000000: ffff ffff ffff ffff ffff ffff ffff ffff
00000010: ffff ffff ffff ffff ffff ffff ffff ffff
00000020: ffff ffff ffff ffff ffff ffff ffff ffff
00000030: ffff ffff ffff ffff ffff ffff ffff ffff
00000040: ffff ffff ffff ffff ffff ffff ffff ffff
00000050: ffff ffff ffff ffff ffff ffff ffff ffff
00000060: ffff ffff ffff ffff ffff ffff ffff ffff
00000070: ffff ffff ffff ffff ffff ffff ffff ffff
00000080: ffff ffff ffff ffff ffff ffff ffff ffff
00000090: ffff ffff ffff ffff ffff ffff ffff ffff
000000a0: ffff ffff ffff ffff ffff ffff ffff ffff
000000b0: ffff ffff ffff ffff ffff ffff ffff ffff
000000c0: ffff ffff ffff ffff ffff ffff ffff ffff
000000d0: ffff ffff ffff ffff ffff ffff ffff ffff
000000e0: ffff ffff ffff ffff ffff ffff ffff ffff
000000f0: ffff ffff ffff ffff ffff ffff ffff ffff

        0, 0x00000000
finsh>>ls("/")
No such directory
        18, 0x00000012
finsh>>device_test("spi0")
block device!

device info:
sector  size : 4096 byte
sector count : 2048
block   size : 4096 byte

device I/O R/W test pass!

device I/O speed test.
RT_TICK_PER_SECOND:100
read 200 sector from 510999 to 512386,59062 byte/s
write 200 sector from 512386 to 514449,39709 byte/s
        0, 0x00000000
finsh>>

出0入0汤圆

 楼主| 发表于 2011-2-15 19:54:17 | 显示全部楼层
求助aozima大侠,能否点拨下RTT 0.3.1 + SPI FLASH 驱动这块,stm32radio这块版本挺多,都有点分不清了。

出0入0汤圆

发表于 2011-2-15 20:07:04 | 显示全部楼层
虽然 device_test结果中显示 device I/O R/W test pass!,但你的read_1sector() 明显是不对的.请仔细检查.

出0入0汤圆

 楼主| 发表于 2011-2-18 11:07:27 | 显示全部楼层
个人使用RTT 0.3.1 版本,在修改以下三处之后,可以进行简单文件操作了。
1、ffconf.h
    #define _MAX_SS    512    => #define _MAX_SS    4096
2、ff.c
    #define MIN_SECTOR 2000UL => #define MIN_SECTOR 512UL  
    /* Minimum partition size */
3、dfs_elm.c
DRESULT disk_read (BYTE drv, BYTE *buff, DWORD sector, BYTE count) { ... }
DRESULT disk_write (BYTE drv, const BYTE *buff, DWORD sector, BYTE count)  { ... }
    两读写函数去掉所有512。
--------------------------------------------------------

\ | /
- RT -     Thread Operating System
/ | \ 0.3.1 build Feb 18 2011
2006 - 2010 Copyright by rt-thread team
FLASH TYPE : S25FL064K
SPI File System initialized!
finsh>>mkfs("spi0")
        0, 0x00000000
finsh>>ls("/")
Directory /:
        0, 0x00000000
finsh>>mkdir("/xxx")
        0, 0x00000000
finsh>>mkdir("/yyy")
        0, 0x00000000
finsh>>mkdir("/zzz")
        0, 0x00000000
finsh>>ls("/")
Directory /:
XXX             <DIR>
YYY             <DIR>
ZZZ             <DIR>
        0, 0x00000000
finsh>>list()
--Function List:
led              -- set led[0 - 1] on[1] or off[0].
device_test      -- e.g:device_test("sd0")
es               -- erase sector 4K
eb32             -- erase blcok 32K
eb64             -- erase blcok 64K
ec               -- erase chip
rs               -- read 1st sector
ws               -- write 1st sector
list_mem         -- list memory usage information
ls               -- list directory contents
mkdir            -- make a directory
rm               -- remove files or directories
cat              -- print file
mkfs             -- make filesystem on disk
hello            -- say hello world
version          -- show RT-Thread version information
list_thread      -- list thread
list_sem         -- list semaphone in system
list_event       -- list event in system
list_mutex       -- list mutex in system
list_mailbox     -- list mail box in system
list_msgqueue    -- list message queue in system
list_mempool     -- list memory pool in system
list_timer       -- list timer in system
list_device      -- list device in system
list             -- list all symbol in system
--Variable List:
dummy            -- dummy variable for finsh
        0, 0x00000000
finsh>>           
-------------------------------------------------------------
点击此处下载 ourdev_616852UAP0E9.zip(文件大小:7K) (原文件名:stm32_eval_spi_flash.zip)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-16 09:49

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表