问题标签 [eeprom]
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.
vb.net - Aardvark I2C VB 编程问题... API 关于 WRITE 功能不明确
在不深入了解项目背景的情况下,我们通过使用一些非常有创意的编码,从一些标准文本字段创建了一个 BIN 文件。没有问题 - 它运行良好。然后,我们使用称为 Aardvark 的编程器将此 BIN 文件写入 EEPROM 芯片。它有自己的程序来执行此操作,称为 FlashCenter,但也提供了一个 API。因为编程这个芯片对一些员工来说是一个障碍,我们想把这个功能包含到我们的 BIN 文件生成器中(即 - BIN 文件被生成、存储并立即写入 EEPROM)。
唯一的问题是,就我有限的知识而言,这是非常先进的,并且无法弄清楚如何使用 Aardvark API 提供的 VB 代码将 BIN 文件数据传递到 EEPROM。我希望您不介意我提供一些示例代码,并希望有人可以帮助我解决这个问题。
这是 Aardvark API 中提供的示例 VB 代码: 代码:
并专门处理“写”功能:
...这是支持文档的定义:
主写入 (aa_i2c_write)
将字节流写入 I2C 从设备。参数 aardvark 适配器的 aardvark 句柄 slave_addr 要从中读取的从站标志特殊操作,如“注释”部分所述 num_bytes 要写入的字节数(最大 65535) data_out 指向数据的指针 返回值 写入的字节数。
特定错误代码 AA_I2C_WRITE_ERROR 从 Aardvark 适配器读取确认时出错。这很可能是通信错误的结果。细节 对于普通的 7 位寻址,slave_addr 的低 7 位应该对应从地址。最高位被忽略。Aardvark I2C 子系统将在抓取总线后将地址与 R/W 位一起组装。对于 10 位寻址,addr 的低 10 位应对应从地址。Aardvark 适配器然后将地址组装成飞利浦规范中描述的正确格式。如果使用 10 位寻址模式,则存在一个限制,即在单个事务中最多只能写入 65534 个字节。
slave_addr 0x00 已在 I2C 协议规范中保留用于广播呼叫寻址。启用以响应广播呼叫的 I2C 从机将确认该地址。通用调用在 Aardvark I2C 主控中没有特殊处理。如果需要通用调用的硬件地址编程功能,该 API 的用户可以手动组装第一个数据字节。
实际上可以向从机写入 0 个字节。从机将被寻址,然后 Aardvark 适配器将立即发送停止条件。没有字节被发送到从设备,因此数据参数被忽略(即,它可以是 0 或指向无效内存)。
如果写入的字节数为零,则可能出现以下情况。
未找到请求的从站。请求的从机在总线上,但拒绝确认其地址。由于存在另一个 I2C 主机,Aardvark 适配器无法占用总线。这里,在从机寻址阶段仲裁丢失,结果可能无法预测。从站被寻址并且没有字节被写入,因为 num_bytes 设置为 0。由于以下可能性,写入的字节数可能小于事务中请求的字节数。
由于存在另一个 I2C 主机,Aardvark 适配器在数据传输期间丢失了总线。从机拒绝接收更多字节。
很明显我必须传递一个字节数组,但我不完全确定如何编码 BIN 文件以便它可以传递。在这个低级别有很多转换,我很模糊......将事物转换为字符串,字节或字符等。我已经玩过它们足以知道在某些情况下你最终会得到ASCII,或十六进制等......但我不确定在这种情况下需要什么才能使其工作。
为了使这更简单,我很想将任何东西传递给 EEPROM。无论我在此代码中进行什么更改,我都无法将任何内容写入 EEPROM。或者也许确实如此,而我只是没有看到。当您运行此代码时,“读取”函数会生成输出“12345678910111213141516”。目前有 128 字节的虚拟内容填充 EEPROM,其中没有 1-16。
如果有人能让我走上正确的轨道,将不胜感激!!!!谢谢你。
arduino - 从收音机读取字符和整数命令以执行功能
我正在尝试创建一个可以从收音机读取字符和整数的代码和循环。该字符是表示数据包恢复命令的命令。此代码正在 Arduino 中执行。这段代码的目的是读取一个字符命令和一个 0 到 512 之间的整数。这个整数值代表一个数字,对应于一个数据包。数据使用 EEPROM 存储。我将在代码中评论我想要实现的目标。
假设一些任意数据已经在 EEPROM 上。
c - linux上读写SPI eeprom的C程序示例
我正在尝试在 linux 上向 spi eeprom 写入 4 个字节,然后读取 4 个字节(最后一个是重要的,我正在使用 zybo 板),我为 spi eeprom 检测做了所有事情,现在我有了:
在此链接中:读取和写入 spi eeprom... Klaus 说可以使用 eeprom 作为字符文件来执行此操作,但在此链接中:如何读取数据... Sawdust 说这是不可能的,因为这种驱动程序是平台驱动程序。
我尝试将 eeprom 视为 C 中的字符文件,但获得的数据不连贯(我在裸机代码中进行了测试并且 SPI 设备工作),可能是因为我不知道如何发送数据,有人可以用一段代码解释一下,我应该如何读/写 SPI EEPROM?
非常感谢 :)
我的代码摘要:
c - 使用 Linux 通过 I2C 读写 EEPROM
我试图通过 I2C 使用 Raspberry Pi B+ 读取和写入Atmel 24C256 EEPROM,但我无法让它全部正常工作。
这是我到目前为止的代码:
像行中那样写入设备write_to_device(0x01, 0x00, buffer, PAGE_SIZE);
不会产生任何错误,但是当我尝试从设备读取数据时,我必须根据规格表写入一个“虚拟”字节,然后尝试从设备读取,但出于某种原因写入虚拟字节会导致错误“输入/输出错误”。我无法弄清楚这是如何工作的。我使用两个资源来指导我,Linux I2C-Dev 文档和来自类似 EEPROM 设备的示例。我有点卡在这里,不知道该尝试什么。非常感谢任何建议或指示!
microcontroller - PIC I2C 与外部 EEPROM 通信
我是 PIC 的新手。我知道这个论坛上有很多关于 I2C 的帖子,我已经尝试了所有给出的方法,但仍然没有解决我的问题。我正在使用 pic16f1516 和外部 EEPROM CAT24C04TDI 来存储一些数据。我使用了 4k7 欧姆电阻进行上拉,我的代码是:
当我将它连接到示波器时,发送 SEN=1 后,SDA 和 SCL 端口没有任何反应。请帮我解决这个问题。很长一段时间以来,我一直坚持这一点。
binary - 有没有其他存储二进制数的方法
二进制数通常以固定位置的 MSB 和 LSB 存储;从 LSB 到 MSB,每个位的权重加倍。还有其他存储二进制数的方法吗?
当需要最少数量的逻辑电子位来表示一个数字时,传统方式可能是最有效的方式,但这种方法存在一些缺点。一个缺点是,当顺序计数时,LSB 的切换非常高,因为它会在每次递增计数时切换状态。我试图打乱每个位的权重,以便在顺序计数时,表示二进制数的每个位都具有相同的切换量。实现这种方法有许多优点,即使数字需要更多位。
一个优点是可以延长 EEPROM 的寿命,因为在代表存储数字的所有物理单元中都会发生等量的切换。超频 CPU、纠错等时的另一个优势。
如果示波器探头检查传统地址总线,则 LSB 有很多 HARD 工作,而 MSB 非常空闲。
传统方法:(数字)0000 0001 0010 0011 0100 新提出的方法:(加扰编码器)(数字)
avr - AVR 中的 EEPROM 不工作
我是C语言的初学者。我正在尝试对我的 ATmega 8 和 ATtiny2313 中的 EEPROM 内存进行操作。基于本教程,我创建了以下代码:
1) 写入一个数字,将 5 放入 uC 的 eeprom
2) LED 闪烁 n 次,其中 n 是从 eeprom 中第 5 位读取的数字
第二个程序多次闪烁led,它从来不是eeprom中应该有的数量。有什么问题?这发生在 atmega8 和 attiny2313 中。
编辑:第一个程序编译后的控制台结果:
18:01:55 **** 项目 eeprom 配置发布的增量构建 **** 全部调用:打印大小 avr-size --format=avr --mcu=attiny2313 eeprom.elf
AVR 内存使用情况
设备:attiny2313
程序:102 字节(5.0% 已满)(.text + .data + .bootloader)
数据:0 字节(0.0% 已满)(.data + .bss + .noinit)
完成的建筑:sizedummy
18:01:56 构建完成(耗时 189 毫秒)
c - Codevision AVR 使用 TWI 访问外部 eeprom 24c02B
我是 C 的初学者。我正在尝试写入和读取外部 eeprom (AT24c02B),然后将存储在 eeprom 中的数据字节显示到 PORTB 中的 LED 和/或 LCD。所以我知道数据成功存储在eeprom中。
PORTB 中的 LED 低电平有效。
这是代码,我从 cvAVR 帮助中获得的:
tw.h
我想问的是:
1.写入eeprom后,我应该调用什么变量来显示8个LED上的字节?
例如:写入字节后:0xF0,则 PORTB 中的 LED 将为 0xF0 (11110000)
- 我确实在互联网上搜索过,但仍然对这条线感到困惑
twi_master_trans(EEPROM_TWI_BUS_ADDRESS,(unsigned char *) &twi_eeprom,3,0,0);
twi_master_trans(EEPROM_TWI_BUS_ADDRESS,(unsigned char *) &twi_eeprom,2,&eeprom_rd_data,1);
有人可以解释一下吗?实际上是什么&twi_eeprom,3,0,0
意思?
设备:Atmega16a
程序:Codevision AVR 3.12
外部 eeprom:AT24c02b
Any answer and comment would be appreciate.
Thanks and pardon my english.
Ipin
binary - Arduino Uno - 不正确/加扰的串行数据
我一直在努力编写一个非常简单的 Arduino 程序,它将地址引脚增加到 EPROM,然后通过其他引脚读取数据。当我无法做像增加一个布尔值数组这样简单的事情时(两个值的 MSB 也几乎总是停留在 1),我的假设是我的代码必须搞砸了,但随后它开始发送两次应该有很多字符(Serial.println(char);
) 发送字符串时没有发生。然后更糟糕的事情开始发生,例如在编译期间没有发现错误时设备完全没有响应。所以我需要知道的是,我的代码是坏了还是我的 Arduino 坏了?我已经尝试过所有波特率,这是我得到的一些输出。请注意,我在代码中插入了延迟以减慢速度,但没有任何改变。我不得不截屏,因为字符不会粘贴到片段中。
这是我的半生不熟的代码,你会注意到它充满了一次发送单个字符的循环(因为这避免了一些疯狂的行为)。
简而言之:我需要了解为什么一开始的串行数据看起来像是在竞速进入程序内存而不是发送它应该发送的字符串,以及为什么我似乎不能做像增加二进制数这样简单的事情并以串行方式输出!
感谢大家
smartcard - EEPROM损坏的症状
假设 Java Card 小程序中存在错误:临时字节数组存储在 EEPROM 而不是 RAM 中。此外,假设这个字节数组被每个 APDU 覆盖。
这个错误迟早会损坏卡。
我们可以期待什么症状?没有任何明确警告或错误的数组中的值不正确?访问这个数组时抛出了一些异常?小程序无法选择?整张卡完全没有反应?
卡应该“一劳永逸”地损坏,还是这些故障会越来越频繁地发生?
在我的实验(J2E145)中,在 5 000 000 个 APDU 之后出现了第一次故障,症状是卡根本没有发送 R-APDU 并且就死了。然而,下一个 APDU 再次正常,然后大约 10000 个 APDU 失败(频率增加),最后在 5 100 000 个 APDU 之后,卡永远停止通信。
是否有任何标准说明在 EEPROM 损坏的情况下会发生什么?(我正在寻找它,但我没有找到任何东西。)
我知道这个问题很广泛,它可能取决于特定的芯片(我对 NXP 芯片特别感兴趣),但我认为您的评论、答案和经验可以帮助许多 Java Card 开发人员,他们在部署后发现他们的代码中存在错误。