Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
NAND-FLASH
UFFS
45
uffs文件系统挂载nand0设备后,所有块全变成坏块了,
发布于 2021-05-27 19:56:53 浏览:1552
订阅该版
``` static rt_err_t _read_page(struct rt_mtd_nand_device *device, rt_off_t page, rt_uint8_t *data, rt_uint32_t data_len, rt_uint8_t *spare, rt_uint32_t spare_len) { int res = RT_EOK; rt_uint32_t i; int sr2 = 0; rt_uint8_t page_data[4], column_data[4]; rt_uint16_t column_addr = 0; rt_uint8_t oob[PAGE_OOB_SIZE]; struct rt_spi_device *spi_device = nand_bus_dev; RT_ASSERT(spi_device != RT_NULL); RT_ASSERT(device != NULL); RT_ASSERT(data_len <= device->page_size); RT_ASSERT(spare_len <= device->oob_size); page = page + (device->block_start) * (device->pages_per_block); if (page >= (device->block_end) * device->pages_per_block) { LOG_E("failed to read page, the page %d is out of bound.", page); return -RT_ERROR; //-RT_MTD_ENOMEM; } // rt_kprintf("_________read block %d, page %d\n", page / (device->pages_per_block), page % (device->pages_per_block)); res = spi_nand_status_read( READ_NAND_SR2_ADDR, &sr2); //0xBF if (res != RT_EOK) { return res; } //0x13 dummy[8bit] page_addr[16bit] page_data[0] = READ_PAGE_CMD; page_data[1] = DUMMY_CMD; page_data[2] = (page >> 8) & 0xff; page_data[3] = page & 0xff; rt_spi_send(spi_device, &page_data, 4); rt_hw_us_delay(500); if (sr2 & NAND_SR2_BUF_BIT_MASK) //BUF=1, read begin column_addr, end with length, one page { // if ((data != RT_NULL) && (data_len == PAGE_DATA_SIZE) && (data + PAGE_DATA_SIZE) == spare) // { // //0x03 cl_addr[16bit] dummy[8bit] // column_data[0] = READ_CMD; // column_data[1] = (column_addr>>8)&0x0f; //only CA[11:0] is effective // column_data[2] = column_addr&0xff; // column_data[3] = DUMMY_CMD; // LOG_I("begin to read page %d.",page); // res = rt_spi_send_then_recv(spi_device,&column_data,4, data, (data_len+spare_len)); // } // else { if (data != RT_NULL && data_len != 0) { //0x03 cl_addr[16bit] dummy[8bit] column_data[0] = READ_CMD; column_data[1] = (column_addr >> 8) & 0x0f; //only CA[11:0] is effective column_data[2] = column_addr & 0xff; column_data[3] = DUMMY_CMD; res = rt_spi_send_then_recv(spi_device, &column_data, 4, data, (data_len)); rt_hw_us_delay(500); column_addr = PAGE_DATA_SIZE; //0x03 cl_addr[16bit] dummy[8bit] column_data[0] = READ_CMD; column_data[1] = (column_addr >> 8) & 0x0f; //only CA[11:0] is effective column_data[2] = column_addr & 0xff; column_data[3] = DUMMY_CMD; // res = rt_spi_send_then_recv(spi_device,&column_data,4, spare, (spare_len)); res = rt_spi_send_then_recv(spi_device, &column_data, 4, oob, (PAGE_OOB_SIZE)); // LOG_E("------------read data,page:%d", page); /* verify ECC */ #ifdef RT_USING_NFTL if (nftl_ecc_verify256(data, PAGE_DATA_SIZE, oob) != RT_MTD_EOK) { res = -RT_MTD_EECC; LOG_E("****************************ECC failed!, page:%d", page); } else { // LOG_E("!!!!!!!!!!! ECC ok!, page:%d", page); } #endif } if (spare != RT_NULL && spare_len != 0) { // LOG_E("------------read spare,page:%d", page); column_addr = PAGE_DATA_SIZE; //0x03 cl_addr[16bit] dummy[8bit] column_data[0] = READ_CMD; column_data[1] = (column_addr >> 8) & 0x0f; //only CA[11:0] is effective column_data[2] = column_addr & 0xff; column_data[3] = DUMMY_CMD; // res = rt_spi_send_then_recv(spi_device,&column_data,4, spare, (spare_len)); res = rt_spi_send_then_recv(spi_device, &column_data, 4, oob, (PAGE_OOB_SIZE)); //rt_thread_mdelay(20); if (spare != RT_NULL) { rt_memcpy(spare, oob, PAGE_OOB_SIZE); } } } } else //BUF=0,read begin with the page, end with all nand { //0x03 dummy[24bit] column_data[0] = READ_CMD; column_data[1] = DUMMY_CMD; column_data[2] = DUMMY_CMD; column_data[3] = DUMMY_CMD; rt_kprintf("BUF bit=0,will read one page to end of the nand,TODO......\n"); } return RT_EOK; } ``` nandflash驱动以搞好,然后使用dfs_mount("nand0", "/", "uffs", 0, 0),挂载nand0设备,直接报坏块,在未挂载之前,使用mtd_nand read nand0 1 1 命令读取的数据全是ff ff,挂载文件系统后全部报坏块,而且再次使用mtd_nand命令读取数据就全变成0x00了,求大神来解答。上面是nand_readpag代码,同时附上截图 ![企业微信截图_16221167245094.png](https://oss-club.rt-thread.org/uploads/20210527/e20f96947abc61fcdde20419517fb870.png) ![企业微信截图_16221167472449.png](https://oss-club.rt-thread.org/uploads/20210527/5820009fe1b04fddeb23e363dc4d6f01.png)
查看更多
4
个回答
默认排序
按发布时间排序
flashman2002
2021-05-27
这家伙很懒,什么也没写!
大概率是NAND驱动移植的有问题。
如果能重来
2021-05-28
这家伙很懒,什么也没写!
UFFS建立会标记nand OOB 区域,判断是好块和坏块,这块接口写好有验证吗?
出出啊
2021-06-21
恃人不如自恃,人之为己者不如己之自为也
试试这个 https://gitee.com/rtthread/rt-thread/pulls/232
yhd0769
2022-07-05
这家伙很懒,什么也没写!
请问您的NAND flash 现在正常使用了吗?能不能分享一份源码
撰写答案
登录
注册新账号
关注者
0
被浏览
1.6k
关于作者
默守默候
这家伙很懒,什么也没写!
提问
28
回答
15
被采纳
1
关注TA
发私信
相关问题
1
uffs 中 nand flash的坏块标志位以及已写标志位
2
uffs 中坏块标志位,已写识别位是哪个位置
3
uffs的crc校验有问题?
4
文件系统中如何删除文件夹
5
如何统计文件系统中某一个文件夹下的文件个数
6
uffs文件系统中一个文件占用nandflash的一个块吗?
7
uffs文件系统报错写不进去数据
8
RTT使用UFFS,重启后MOUNT速度的问题
9
at91sam9260 自动挂载uffs文件系统出现data abort?
10
NUC980 生成 UFFS 文件系统镜像
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
进行i2c驱动移植的经验总结
2
在VSCode中使用clang-format
3
我该如何使用这个微雪的WIFI400 WIFI-LPB-100在rtt里或者我该怎样为它开发驱动
4
在GD32F470Z的RTC适配笔记
5
RT Thread 源码笔记 :内存池
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
289
次被采纳
张世争
808
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
catcatbing
3
篇文章
4
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部