问题标签 [flash-memory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 擦除闪存 NOR:ioctl(MEMUNLOCK) 返回状态?
我正在尝试使用 C 语言中的 Linux MTD 驱动程序擦除 NOR 闪存...
我对ioctl(MEMUNLOCK)
调用的返回状态感到困惑,即使ioctl(MEMERASE)
在它之后成功也会返回错误。
以下代码显示警告消息但有效(即闪存块已被擦除):
当我在网上查看一些 C 代码时,并不总是检查 MEMUNLOCK 的返回状态(例如来自mtc.c):
flash_unlock
也返回一个错误:
我错过了什么吗?使用某些配置从 MEMUNLOCK 收到错误是否正常?
备注/环境:
- 未在
mtd3
分区上设置只读标志 (MTD_WRITEABLE) (仅在mtd0
和上mtd1
)。 flash_lock
也返回相同的错误。- TI AM3505(ARM Cortex A8、OMAP34)。
- Linux 2.6.37。
- 闪存 NOR Spansion S29GL512S12DHIV1。
内核日志:
c - 执行存储在 ARM 处理器上的外部 SPI 闪存中的程序
我有一个能够与外部闪存芯片接口的 ARM 处理器。写入芯片的是为 ARM 架构编译的程序,准备执行。我需要知道如何从外部闪存获取这些数据到 ARM 处理器上执行。
我可以提前运行某种复制例程,将数据复制到可执行内存空间中吗?我想我可以,但是 ARM 处理器正在运行一个操作系统,我没有大量的闪存空间可供使用。我还希望能够一次安排两个甚至三个程序的执行,一次将多个程序复制到内部闪存中是不可行的。一旦程序在可访问的内存空间内,操作系统就可以用来启动程序,所以任何需要事先完成的事情都可以。
linux - 在 Linux 中获取硬盘扇区写入统计信息的最简单方法
我正在为 Raspbery Pi 开发数据记录器软件和硬件。Raspberry Pi 使用 SD 卡进行存储。我需要每秒将测量结果插入数据库。
我想对几个数据库进行一些调查,并获取一些统计数据,以估计我的闪存在我的应用程序中的工作时间。
我担心单细胞编程/擦除周期。例如 - 循环存档(由 RRDTool 使用)具有固定大小、预分配的存储空间,并且当前记录或最后插入时间戳等数据始终写入该固定文件中的 1 个地址。
有什么简单的方法可以在 linux 中收集/记录带有地址的写命令吗?
testing - 总线故障的软件内存测试
我有一块板子,上面有很多闪存芯片,其中一些显示出间歇性故障。标准内存测试没有显示任何具体的问题地址,除了某些芯片在机械和热应力下间歇性失效。
怀疑实际连接而不是闪存单元本身,我正在寻找一种方法来测试并行总线的地址或数据引脚错误。
有一些内存测试,但它们更适用于 RAM 而不是闪存 ( http://www.ganssle.com/testingram.htm )。具体来说,并行闪存具有一系列总线写入来写入每个值;写入/验证失败很容易是写入操作,它可能是总线上的任何引脚。
欢迎提出想法...
u-boot - NAND块大小混乱
我对NAND芯片有一个基本的疑问,我们正在尝试提出基于DM365的定制板,
我们正在尝试从 NAND 启动,
使用的 NAND 来自美光 MT29F8G08ABABA。(1Giga 字节 = 8 Gigabits)
组织 – 页大小 x8:4320 字节(4096 + 224 字节)
– 块大小:128 页(512K +28 K 字节)
– 平面大小:2 个平面 x 每个平面 1024 个块
– 设备大小:8Gb:2048 个块
现在根据 MT29F8G08BABA 的数据表,我认为块大小是(512K+224)字节。
但是在 u-boot 术语中,他们使用 NAND 设备的扇区大小。因为当我
nand info
从 u-boot 命令行使用命令时,我得到 nand size 如下
这个扇区大小是块大小(根据数据表实际上是 512k)还是环境扇区?
NAND读/写在u-boot上工作正常,没有这样的问题。
所以我只想了解这些术语。
现在,如果这是环境扇区大小,那么有没有办法从 U-boot 获取块大小信息?
有人可以请教我吗?
谢谢,
问候,
安库尔
upgrade - (STM32F10x, IAR EW ) 通过 RS232 进行自升级引导加载程序,从 FLASH 复制后如何在 RAM 中执行程序
我在 STM32F103RBT6 工作,我想升级我放入 0x08000000~0x08003fff 的引导加载程序,我将所有其他闪存用于应用程序代码。通过RS232,我想升级bootloader。所以我正在考虑将代码复制到 RAM -> 在 RAM 中执行原始引导加载程序 -> 下载新的引导加载程序。我所做的是:
它不起作用。
问题是 :
我可以将代码复制到 0x20000000~。我应该将 RAM 分成两部分,但如何?
如何设置 Vector 表位置,在哪里设置?我该如何处理“VECT_TAB_OFFSET”。
如果您能给我一些解决方案或任何命令,将不胜感激。非常感谢。
linux-kernel - 无法将 ubi 附加到 mtd 分区
我们在基于 DM365 的定制板上使用 MT29F8G08ABABA。我们正在使用 NAND 引导。RootFS 是 UBIFS 格式,
下面是NAND的基本结构。
我正在使用以下命令来创建 ubif,
dm368_ubinize.cfg 内容如下,
然后我使用以下命令将此 ubifs 放入 NAND,
当我启动内核时,从内核检测UBIFS时出错,
下面是相同的内核日志,
现在我的疑问是为什么内核将物理擦除块大小报告为 256KiB?从 NAND 的架构来看,它看起来是 512KiB。
错误的任何建议/指针?
先感谢您
c - 通过 C 代码计算 FLASH 利用率
我想优化/减少我的软件的内存使用。我正在研究的一种方法是寻找删除冗余和不必要的代码。在我的软件中有很多功能(最多 3000 个)可以通过功能启用机制激活/停用。我要做的是找出一个特性使用了多少 RAM/FLASH,然后开始评估最大的那些,看看它们是否需要(可以从代码中安全地删除不需要的特性)。另请注意,一个函数本身可能有多个特性。
我们的代码看起来像这样:
如何计算 if 语句中的代码使用了多少 FLASH?我不能使用最终链接映射文件,因为它只提供有关函数的数据,而不是其中的单个语句。我想到的一种解决方案是从 C 代码中创建一个汇编列表文件 (.alst),然后计算 if 语句中指令的大小,这不过是这些代码行使用的 FLASH 数量。
请让我知道我是否走在正确的轨道上,或者是否有更好/更简单的方法来做到这一点?
我正在使用:处理器:MPC5554(POWER PC 架构)
编译器:WindRiver Diab
如果逻辑正确,我最终会编写一个脚本来搜索启用并进行所需的计算。
c - Flash Memory 通过 SPI 读写
这是我第一次尝试使用 SPI 协议。我正在尝试理解我的开发套件(具有 STM32F207VCT6 微控制器)附带的示例代码。此代码实现与 AT45DB041D 闪存的通信(读取和写入)。
每次此示例代码设法读取内存时,它不仅会发送有关要读取的内容的信息,还会要求立即接收数据。收到的这些数据不用于任何目的(显然)。稍后接收命令将通过先发送 0x00 字节再次询问要读取的实际数据。以下代码表明:
定义:
如您所见,SPIx_Send_byte 代码不仅发送要读取的内容,还接收不会使用的信息。
有人可以帮我理解为什么需要这样做以及为什么需要发送 0x00 字节来实际接收数据吗?
谢谢!
c - 如何仅更新微控制器中的部分代码或 API
我正在为我的项目使用 atxmega256a3bu 微控制器,我想制作一个程序架构,就像我已经编译和编程了代码一样,现在只能更改一些 API 并将其重新编程到板上闪存的其他部分不应更改,新编译的 API 可以使用已在闪存中编程的其余代码。
比如我把所有的代码都做了,下载到板子里面,里面有个API函数叫
现在,如果我想更改如下功能:
那么如何在不更改整个闪存代码的情况下更新此功能。
问候,shreyas。