关于nandflash的读取。我用的是ti的驱动,但是为啥读取出来的不是我想要的数据呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于nandflash的读取。我用的是ti的驱动,但是为啥读取出来的不是我想要的数据呢相关的知识,希望对你有一定的参考价值。

参考技术A 通过flash驱动提供接口进行读写,而且flash的读写不是你想的可以按字节来读,而是按flash的pagesize大小来的,而且擦除只能按block擦除
一般通用的可以使用mtdutils这个软件包交叉编译,它有提供nanddump nandtest nandwrite等命令
从flash读取到内存的数值是没有格式的,只能按照起始地址和长度读取二进制,你需要对这段内存值进行强制格式转换,然后就可以打印出你需要的值了追问

我写入用的驱动是一页512bytes,一块32页,然后我擦除0x4000~0x8000也就是块1,然后在块1的页0上写入数据。我读取的时候用的驱动是扇区管理方式的,一个扇区512bytes,然后我读0x4000这个地址竟然都是FF。我哪里错了吗。

还有就是我擦除0x8000~0xc000,然后写入数据,再读0x8000是可以读出数据的。这两种驱动怎么定义的地址都不一样呢

研发课堂 I 飞凌AM5718关于GPMC驱动示例讲解分析过程

一、GPMC简介

GPMC的全称是 General-Purpose Memory Controller,即通用存储控制器,是TI的arm芯片 AM5718用来与外部存储设备例如NOR FLASH、NAND FLASH、SRAM等等通信的一个接口。这个接口并不是AM5718特有的,在BeagleBone Black、AM35XX等芯片上也有类似接口。

特点:

1.灵活的 8 位和 16 位异步存储器接口

2.具有多达8个片选

3.支持NAND、NOR、复用NOR和SRAM

4.最大支持512MB的片外存储器连续地址空间的访问

二、GPMC的硬件连接方式

1.GPMC 与 16位的地址数据复用的外部存储设备设备连接:

技术图片

2.GPMC 与16位的非复用外部存储设备连接

技术图片

3.GPMC 与8位的非复用外部存储设备连接

技术图片

4.GPMC与8位的NAND FLASH连接:

技术图片

三、OK5718-C GPMC 总线接口

OK5718-C 预留出 GPMC 总线接口,引出 GPMC_AD[15: 0]数据地址复用信号,可作为总线设备
连接测试使用。定义如下

技术图片

此示例中OK5718把GPMC接口配置为异步模式并设置NOR FLASH、地址数据线复用的模式,实际只使用到了如下I/O口,信号方向如下图所示。

GPMC_AD[15:0]: 16位地址/数据线

GPMC_CS0/ GPMC_CS3: 片选信号

GPMC_OEN_REN: 输出使能信号

GPMC_WEN: 写使能信号

GPMC_ADVN_ALE: 地址有效信号

技术图片

四、配置设备树

linux内核有关gpmc的讲解可参考内核目录的下列文件:

OK57xx-linux-kernel/Documentation/devicetree/bindings/memory-controllers/omap-gpmc.txt

OK57xx-linux-kernel/Documentation/devicetree/bindings/mtd/gpmc-nor.txt

OK57xx-linux-kernel/Documentation/devicetree/bindings/mtd/gpmc-nand.txt

我们需要Ok5718修改的设备树文件为OK57xx-linux-kernel/arch/arm/boot/dts/ok5718-idk.dts

下面为已经调试好的设备树代码

1.增加Gpmc引脚配置

技术图片

2.增加GPMC结点

配置片选引脚为3、Base address为0x8000000 和 地址空间为0x1000000。

ranges = <3 0 0x08000000 0x1000000>;

配置的各项时序参数。

技术图片

四、实验结果

将测试程序代码交叉编译后,将可执行文件app-fram 拷贝到5718 开发板

执行app-fram read 命令

抓取CS3 ADVN和OEn的波形如下, GPMC一次的读取周期大概为112ns。

技术图片

通道1为片选信号CS3,通道2为输出使能信号OEn

技术图片

通道1为片选信号advn,通道2为输出使能信号OEn

技术图片

通道1为片选信号advn,通道2为输出使能信号AD2 信号。

点击此处进入源代码下载地址>> 提取码为:j89C

原文链接:https://www.forlinx.com/article_view_339.html

以上是关于关于nandflash的读取。我用的是ti的驱动,但是为啥读取出来的不是我想要的数据呢的主要内容,如果未能解决你的问题,请参考以下文章

研发课堂 I 飞凌AM5718关于GPMC驱动示例讲解分析过程

9.NandFlash的驱动_读操作2440

怎么看时序图--nand flash的读操作详解

运行UART的程序

关于GeForce GTX1050 Ti驱动问题求助

十八Nand Flash驱动和Nor Flash驱动