如何恢复英特尔爱迪生板
我通过用BuildRoot汇编(支持Edison Board)来刷新Intel的预先构建的SRC图像. . ,但董事会被困在FSBL上(FSBL看门狗正在不断重新启动板).我试图在船上闪烁,但是在船上没有听众可以使用闪存操作(通常由U-Boot中的dfu实用程序完成). 这样我就无法再次闪烁预构建的图像. 在当前情况下,我该如何提高董事会? 我如何再次闪烁图像? 输入: 板控制台O/P ****************************** PSH KERNEL VERSION: b0182b2b WR: 20104000 ****************************** SCU IPC: 0x800000d0 0xfffce92c PSH miaHOB version: TNG.B0.VVBD.0000000c microkernel built 11:24:08 Feb 5 2015 ******
2 2023-12-25
编程技术问答社区
检查某些USB闪存是否已连接到我的系统上
我想拥有一个代码,它可以检查某些USB闪存是否已连接到我的系统.我的意思是我想从USB闪存中获取product ID和serial Number>的东西,该闪存连接到我的基于linux的系统,并检查这些数字是否与我的有效数字匹配.我还想知道有人可以伪造这个数字吗?我的意思是有人使用无效的闪存设备并生成这些数字来传递我的验证过程? 解决方案 USB设备在/sys/bus/usb/devices/的内核伪层次结构中进行了描述. lsusb诸如lsusb检查此层次结构.此处列出了每个设备,包括您的计算机提供的USB集线器和端口,每个设备是每个Symlink/Directory的设备. 每个设备目录可能包含以下有趣的文件: idVendor (vendor code, four hexadecimal characters) idProduct (product code, four hexadecimal characters) manu
22 2023-11-10
编程技术问答社区
用C语言在STM32L4x1闪存中写入数据
我正在尝试使用Windows 7上的JTAG ST-Link/V2在STM32L476的闪存中写入. . 作为有关硬件的新手,并且仅在编程非限制的常规C时才有效,恐怕我可能会伤害或不可撤销地修改闪存.另外,我不确定自己可以做什么或不能做什么. 我已经想出了阅读手动似乎是在 0x08000000000000000000 内存位置上的写作是个好主意.使用C代码呼叫 st-link_utility : const char CMD_ACCESS_ST_UTILITY[] = "cd C:/Program Files (x86)/STMicroelectronics/STM32 ST-LINK Utility/ST-LINK Utility&&ST-LINK_CLI.exe "; bool STLINKWriteSystemCalls(void) { char cmd[200] = ""; strcpy(cmd, CMD_ACCESS_ST_UTILITY
26 2023-09-30
编程技术问答社区
STM32-写作和阅读闪光灯
有人可以告诉我我做错了什么愚蠢的事情或理解吗?作为测试,我试图将一个简单的数字写入Flash并检索它.一旦成功,我将将其扩展到6个签名值. 我的设备是STM32L476RG uint64_t data = 88; Erase_Flash(); HAL_FLASH_Unlock(); Address = ADDR_FLASH_PAGE_256; if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_FAST, Address, data) != HAL_OK) serprintf("Error writing flash."); HAL_FLASH_Lock(); uint8_t *flash_biases = (uint8_t*) (ADDR_FLASH_PAGE_256); 根据我阅读的内容,我应该能够像我一样访问闪存.但这不是我期望的价值. erase_flash()函数看起来像这样: void Erase_Flash()
82 2023-09-30
编程技术问答社区
擦除后不能写到闪存中
因此,擦除后我不能直接写入内部闪存.如果在写操作之前没有擦除操作,那么我可以.关于为什么有什么想法? 编程功能返回"成功的写入"值,但是当查看内存时,没有编写数据.这是代码: uint32_t pageAddress = 0x08008000; uint16_t buffer = 0xAAAA; HAL_FLASH_Unlock(); FLASH_PageErase(pageAddress); HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, pageAddress, buffer); HAL_FLASH_Lock(); 我尝试在擦除和编程之间锁定内存,在这些操作之间延迟延迟,这无济于事. 解决方案 问题是,当flash_pageerase()被称为flash-> cr寄存器中的每位,在其末尾未清除.在闪光灯被解锁时清除此位允许在此之后运行其他操作. STM文档对此无话可说. 其他解决方案 您可以使用HAL_FLASH
10 2023-09-30
编程技术问答社区
在Flash中为用户数据分配内存(STM32F4 HAL)。
我正在尝试使用STM32F405的内部闪光灯来存储一堆重新启动后保留的用户可设置的字节. 我正在使用: uint8_t userConfig[64] __attribute__((at(0x0800C000))); 分配我要存储的数据的内存. 当程序启动时,我检查是否将第一个字节设置为0x42,如果不是,则使用: 将其设置为: HAL_FLASH_Unlock(); HAL_FLASH_Program(TYPEPROGRAM_BYTE, &userConfig[0], 0x42); HAL_FLASH_Lock(); 之后,我检查了userConfig[0]中的值,然后看到0x42 ...太好! 当我点击重置时,再次查看位置,它不再是0x42了... 有什么想法我出了什么问题吗?我也尝试了: #pragma location = 0x0800C00 volatile const uint8_t userConfig[64] 但是我得
20 2023-09-30
编程技术问答社区
在ARM处理器上执行存储在外部SPI闪存中的程序
我有一个能够与外部闪存芯片连接的ARM处理器.写在芯片上的是为准备执行的ARM架构编辑的程序.我需要知道如何做的是将这些数据从外部闪光灯中获取到ARM处理器以进行执行. 我可以在将数据复制到可执行内存空间中之前运行某种副本例程吗?我想我可以,但是ARM处理器正在运行一个操作系统,并且我没有闪光灯剩下的空间可以使用.我还希望一次安排执行两个或什至三个程序,并且一次将多个程序复制到内部闪存中是不可行的.操作系统可用于启动程序,一旦它们在可访问的内存空间内,因此需要事先完成的任何事情都可以. 解决方案 通过阅读@fiddlingbits和@ensc的现有答案,我认为我可以提供另一种方法. 您说您的闪存芯片无法被映射.这是一个很大的限制,但我们可以使用它. 是的,您可以提前运行副本例程.只要将其放入RAM,就可以执行它. DMA使其更快: 如果您有一个外围DMA控制器(例如Atmel SAM3N家族中可用的DMA控制器),则可以使用DMA控制器在处理器确实确
6 2023-09-08
编程技术问答社区
微控制器和闪存芯片编程开发和模拟
我刚刚开始学习微控制器编程,我似乎有很多麻烦入门,尤其是模拟部分. 这是我需要编程的应用程序:我需要在闪存芯片中存储一些Wave文件,并使用Cortex-M0从闪存中读取音乐,并组合播放或运行它们上的一些基本信号处理. 我正在寻找一个支持端到端模拟的IDE.我查看了Coide(因为如果我免费使用的是第一个即将到来的Cortex IDE),并且在定居于Cortex之前,我还查看了Mplab,但是我看不到任何支持Flash Memory Chip Simulation.我似乎能够正确模拟芯片,但是我看不到一种建立虚拟闪存芯片的方法. 我错过了什么吗?多谢. 解决方案 首先 - mplab是微芯片产品的IDE,Microchip没有任何臂芯片,因此此IDE根本不会帮助您. 至于Cooocox-此IDE基本上是Eclipse + GCC工具链,而且据我所知,网络上可用的大多数工具链都无法启用模拟器,即使它们这样做,这只是一个指令模拟器(可能不适合您的体系结构,但我
18 2023-09-04
编程技术问答社区
闪存中的循环缓冲器
我需要将各种长度的物品存储在圆形队列中的闪光芯片中.每个项目都会有其封装,因此我可以弄清楚它的大小以及下一个项目的开始.当缓冲区中有足够的项目时,它将包裹到开始. 什么是将圆形队列存储在闪光芯片中的好方法? 我想存储数万个物品.因此,从开始开始阅读到缓冲区的末尾并不理想,因为它需要时间搜索到末尾. 另外,由于它是圆形的,所以我需要能够将第一个项目与最后一项区分开. 最后一个问题是将其存储在Flash中,因此擦除每个块既耗时又可以对每个块进行设置的次数. 解决方案 首先,块管理: 将一个较小的标头放在每个块的开始时.您需要跟踪"最古老"和"最新"的主要内容是一个块号,它只是增加了Modulo k . k 必须大于您的块总数.理想情况下,使 k 小于最大值(例如0xffff),这样您就可以轻松地分辨出什么是删除的块. 在启动时,您的代码依次读取每个块的标题,并在n i+1 =(n i + 1)Modulo K.注意不要被擦除的块(例如0xffff)
10 2023-07-18
编程技术问答社区
冲洗数据库是什么意思?也与 "刷新 "有关
我想知道"齐平"和"闪光"的含义以及它们之间的区别. 解决方案 Flushing :将应用程序数据的临时状态与数据的永久状态(在数据库中或磁盘上). 说明:冲洗实际上是一个缓存术语,而不是数据库术语.当您使用ORM或应用程序保存数据时,通常在内存中对其进行对象引用.例如,用户.该用户的状态可以像这样表示:{name: Bob, id: 10}.当您使用数据库冲洗时,您会更新两个引用以相互匹配.某些ORM,例如Hibernate Cache数据集(即使没有配置缓存),以及当触发器或当前会话以外的其他系统或进程更新数据时,数据是离同步的,直到您"冲洗"为止. flash :我假设您的意思是"闪存"?这只是意味着您正在存储数据的硬件将数据存储为1s和0s,而传统存储器设备将内存存储为磁性正电荷或负电荷.您真正需要知道的是,它比磁性驱动器快得多. 希望这会有所帮助!
14 2023-06-21
编程技术问答社区
ubi文件系统损坏的原因
我已经使用UBI文件系统和MTD子系统在NAND Flash的顶部工作. 它正常工作. 但是现在我发现以下错误: UBI错误:UBI_IO_READ:错误-74在阅读516096字节时,来自PEB 2701:8192,阅读516096字节 end_request:i/o错误,dev mtdblock5,扇区49160 我上面提到的这些错误的原因是什么? 如何从这些错误中恢复? 解决方案 两者都显示与NAND FLASH上的损坏或不良块有关的I/O错误,请尝试使用另一个闪光灯并使用它.您也可以尝试擦除闪光灯并再次尝试. 谢谢, Alok Thaker 其他解决方案 错误-74是EBADMSG.查看 ubi_io_ff :Flash的读取区域仅包含0xffs ubi_io_ff_bitflips :与%ubi_io_ff相同,但也有一个数据 MTD驱动程序报告的完整性错误 (在NAND的情况下,不可纠正的ECC错误) ubi_io_bad_
16 2023-04-20
编程技术问答社区
擦除外部FLASH
我正在使用MCF51EM256 Freescale MicroController,并且我有一些问题将数据存储在外部闪存中以使其持久. 我需要存储此结构: typedef struct { ui64_s Ea_ps; ui64_s Ea_ng; ui64_s Er_q1; ui64_s Er_q2; ui64_s Er_q3; ui64_s Er_q4; uint16 F_ea; uint16 F_er; }Ws_EnergyAcc64; 其中: typedef union{ uint64 v; uint32 p[2]; } ui64_s; 和: typedef unsigned long long int uint64; typedef unsigned long int uint32; typedef unsigned short int uint16; 为了做到这一点,我已经实现了此功能:
100 2023-03-27
编程技术问答社区
NAND闪存编程:写的颗粒度?
当今大型NAND Flash芯片中,kow中有人在kow中有人写访问吗? 写作的最小粒度是什么?我在这里有一个微控制器闪光灯 至少需要1个,最多需要4个单词(16位单词) 立即写statemachine.我认为大(> 1 Gbit)闪烁 出于书面表现原因,在这里行事不同. slarti 解决方案 可以清楚地说,要编写1位,您必须清除整个内存块,要编写0位,您只需要写一个内存位置即可.您是在谈论一次写(从本质上将某些部分从1更改为0)还是在谈论擦除块并重新编写块,以便您可以使某些位从0到0 1? 最简单的了解方法是仅获取有关零件的数据表或来自不同供应商的少数数据表.我使用的最新一个是基于SPI的,它具有类似于0x10000(65536)字节大小的擦除块.我称之为较旧的平行线,那些具有传统地址总线和数据总线的平行线,有256个字节或512个字节页面,但这些不是较新的技术(NAND). 编辑 查看一个随机选择的三星文档.兆字节大小的记忆的记忆尺寸为256和512
48 2023-03-27
编程技术问答社区
我何时使用xdata?
我是嵌入式系统编程的新手.我正在使用使用8051芯片组的设备.我在示例程序中注意到,在定义变量时,有时它们会使用关键字XDATA.这样... 静态的无符号char xData patternsize; 虽然省略了XDATA关键字. 我的理解是XDATA关键字指示编译器该变量要存储在外部,闪存,内存中. 在什么情况下,我应该使用XDATA在外部存储变量?访问这些变量需要更长的时间,对吗?使用XDATA存储的值不保留在设备硬重置之后? 另外,我知道静态关键字意味着该变量将通过对其定义的函数进行的每个调用持续存在.静态和XDATA必须一起使用吗? 解决方案 8051体系结构具有三个独立的地址空间,核心RAM使用8位地址,因此最多可达256个字节,XDATA是一个16位地址空间(64kbytes),具有读/写入能力,并且程序是空间是具有执行和仅阅读数据功能的16位地址空间.由于其较小的地址范围并与核心接近耦合,因此在代码空间和访问周期方面,解决核心RAM
6 2023-03-25
编程技术问答社区
从用户空间访问NOR内存
在我的Compulab CM-X270 COM Linux内核上放置在Nor中.这个没有MTD支持的内核,启动后,我无法访问或作为MTD分区.我的目标是从用户空间更新此内核.是的,最简单的方法从bootloader进行更新,但是我无法在此任务中使用它.可能映射或在/dev/mem或其他任何方式中? 解决方案 我与SRAM有类似的情况.我为/dev/sram写了一个块设备驱动程序.通过设备驱动程序访问所有Linux安全规则. 您没有提及如何访问此记忆.如果它在物理内存地址空间中,则驱动程序将执行request_mem_region()和ioremap()将NOR内存映射到虚拟内核存储空间中.然后,用户程序可以在此块(或char)设备上使用标准文件I/O.
8 2023-03-09
编程技术问答社区
在一个MTD块设备上写入
我试图使用MTD块设备在NAND闪存上写入,但我不了解所有内容. 当我阅读 mtdblockN是仅读取块设备n mtdN是读/写char设备n mtdNro是仅读取的char设备n ,但我想在C中使用简单的write直接将字节写入分区,而我不明白它是如何工作的(我读了一些我首先必须删除要写入的扇区). 我应该使用哪种设备以及如何在此设备上写入? 解决方案 从/到内存技术设备的阅读和写作实际上并没有与任何其他类型的IO完全不同,但在写作之前,您需要删除该扇区(erase Block) 为了使事情变得简单,您始终可以使用MTD-Util(例如flash_erase,nanddump和nandwrite,分别用于擦除,阅读和写作)而无需编写代码./p> 但是,如果您确实想务实地进行此示例,请务必阅读所有评论,因为我将所有细节放在其中: #include #include #include
26 2023-03-08
编程技术问答社区
通过C代码计算FLASH的利用率
我想优化/减少软件的内存使用情况.我正在寻找的方法之一是寻找删除冗余和不必要的代码. 在我的软件中,有很多功能(最多3000个)可以通过功能启用机制激活/停用.我要做的是找到一个功能使用的RAM/Flash多少,然后开始使用最大的RAM/Flash进行评估,并查看是否需要它们(可以安全地从代码中删除不需要的功能).另请注意,功能本身可能具有多个功能. 我们的代码看起来像这样: void foo (void) { if(TRUE == feature1_enable) { doSomething; } if(TRUE == feature2_enable) { doSomething; } //rest of the code } 如果语句正在使用,我该如何计算内部的代码?我不能使用最终的链接映射文件,因为它仅提供有关功能的数据,而不是其中的各个语句.我认为的一种解决方案是从C代码中创
18 2023-02-04
编程技术问答社区
在一个MTD块设备上写入
我试图使用MTD块设备在NAND闪存上写入,但我不了解所有内容. 当我阅读 mtdblockN是仅读取块设备n mtdN是读/写char设备n mtdNro是仅读取的char设备n ,但我想在C中使用简单的write直接将字节写入分区,而我不明白它是如何工作的(我读了一些我首先必须删除要写的扇区). 我应该使用哪种设备以及如何在此设备上写入? 解决方案 从/到内存技术设备的阅读和写作实际上并没有与任何其他类型的IO完全不同,但在编写之前,您需要删除该扇区(erase Block) 要使自己简单地让自己简单地使用MTD-Utils(例如flash_erase,nanddump和nandwrite,分别用于擦除,阅读和写作)而无需编写代码./p> 但是,如果您想务实地进行此示例,请务必阅读所有评论,因为我将所有细节放在其中: #include #include #include #
40 2023-02-03
编程技术问答社区
STM32F4发现-写/读Flash存储器
这是我的第一篇文章,抱歉,如果格式或出现问题.在我们的大学的建议这里 (两个帖子以相同的方式解释): __attribute__((__section__(".user_data"))) const char userConfig[64]; [...] void Write_Flash(uint8_t data) { HAL_FLASH_Unlock(); __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGSERR ); FLASH_Erase_Sector(FLASH_SECTOR_6, VOLTAGE_RANGE_3); HAL_FLASH_Program(TYPEPROGRAM_WORD, &userConfig[0], data); HAL_FLASH_
148 2023-02-03
编程技术问答社区
如何在STM32F4, Cortex M4上写/读FLASH
我想写一个变量,例如用数字5的整数到闪光灯,然后在电源消失后,再次打开设备读取它. 我已经知道,为了写一些我第一次需要擦除页面然后写. 在手册中它说: 在Flash选项键寄存器(Flash_optkeyr)中写入OptKey1 = 0x0819 2a3b 在Flash选项密钥寄存器(Flash_Optkeyr)中写入OptKey2 = 0x4C5D 6E7F 如何执行此任务? 扇区0有一个块地址从0x0800 0000到0x0800 3fff,这是我想写的地方. 此处链接到手册,第71页: STM32手动 解决方案 您可以使用以下代码进行写入数据以使用HAL库进行闪存. void Write_Flash(uint8_t data) { HAL_FLASH_Unlock(); __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WR
90 2023-02-02
编程技术问答社区