0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MAXQ环境下受保护的EEPROM操作

星星科技指导员 来源:ADI 作者:ADI 2023-03-02 16:22 次阅读

非易失性存储器对于嵌入式微控制器应用至关重要。本应用笔记解释了如何使用基于事务的提交回滚机制来保护外部EEPROM存储器器件的内容。虽然针对的是外部存储器器件,但这里介绍的原理同样适用于许多MAXQ微控制器的内部EEPROM。

介绍

对于嵌入式微控制器应用,非易失性存储器通常是必不可少的。无论是维护因断电而必须保留的设置,还是存储公司的关键交易记录,可靠的非易失性存储器都是现代微控制器领域的基本要素。

通常,非易失性存储采用外部串行存储器的形式。从字面上看,数十亿个这样的内存组件多年来在该领域已被证明是可靠的。现在,密度从几百字节到一兆字节甚至更多,几乎可以在需要维护设置的所有设备中找到至少一种这些紧凑、廉价的设备。

任何类型的非易失性存储(从EEPROM到闪存再到旋转存储)的一个问题是由于写入周期中断而导致的数据丢失。如果在执行写入周期时电源出现故障,则在电源恢复后,数据损坏可能会导致数据损坏,而没有任何简单的恢复机制。

本文介绍一种基于事务的提交回滚机制,以保护外部串行EEPROM存储器器件的内容。本文介绍的原理同样适用于许多MAXQ>微控制器中包含的内部EEPROM。此应用程序的文件可供下载(ZIP,20.5kb)。

I²C EEPROM的特性

串行存储器器件具有多种接口,但最常用的接口是I²C。这种总线具有许多优点:高度标准化;它只需要从控制器到内存的两根电线;它具有非常灵活的时序要求,使其能够由软件驱动。一个I²C主机可以驱动多个I²C从器件,从而最大限度地减少主器件上的引脚数。

在所有EEPROM器件中,写入周期明显长于读取周期。这是因为电荷在写入周期中通过隧道机制穿过绝缘屏障传输,并且此操作需要时间。虽然增加电压可以加速这一过程,但过大的电位会导致势垒的介电击穿,从而损坏器件。EEPROM 器件的典型写入周期时间约为 10 毫秒;读取周期通常发生在几百纳秒内。

许多I²C EEPROM器件试图通过使用页面模式来降低写入周期时间的重要性。此模式允许将多个字节传输到缓冲区,然后一次写入数组。I²C存储器器件的典型页面大小为32字节。因此,只需一个写入周期即可填充 EEPROM 阵列的 32 个字节。

这一点很重要,因为串行EEPROM器件具有指定的耐久性:页面可以容忍的生命周期写入周期数的上限。写入周期的典型耐久性范围为 10,000 到 1,000,000。然而,即使有一百万次写入周期的耐久性,也很容易看出软件如何快速磨损存储设备。每秒仅执行 100 个写入周期,在不到三个小时的时间内,设备写入周期计数就耗尽了。

考虑到这些基本的EEPROM特性,嵌入式处理器的稳健非易失性存储系统的设计人员必须牢记以下几点:

任何一页都不应成为重复写入的目标。具体来说,将一个页面设置为每次写入另一个页面时都必须更新的“目录”是不可接受的。

如果在写入周期内电源中断,则必须提供一种机制来:(1) 检测中断的写入:和 (2) 完成事务;或 (3) 将事务回滚到预写条件。

必须通过某种类型的检查数据机制(校验和、CRC、消息摘要)来确保数据完整性。

设计目标

虽然上述EEPROM考虑因素可以通过许多非易失性文件系统来解决,但这种文件机制给小型嵌入式微控制器带来了沉重的负担。许多文件系统需要比小型微控制器更多的RAM,而完整的文件系统比大多数应用程序所需的RAM要多。

考虑到这一点,以下是EEPROM数据保护机制的目标:

轻量级:保护机制应为检查数据保留不超过 10% 的 EEPROM 空间。它应该只需要少量的计算开销。

块大小:受保护块的块大小应与EEPROM中的本机写入页相同。由于EEPROM器件的页面大小始终是2的偶数次幂,因此软件编码比从每个块保留一个或两个字节更容易。

耐久性:不应为每个受保护的周期写入任何单个页面。

稳健:每个电源故障实例都应该是可证明的可恢复的。

此处介绍的保护机制有六个接口功能:读取、写入、提交、回滚、检查和清理。

read 函数接受块号和指向 32 字节缓冲区的指针。如果缓冲区地址和块号在有效范围内,则例程会将指定的块读入缓冲区并检查其有效性。它将返回条件有效读取、无效读取、无效缓冲区地址或无效页码或保护失败。

写入函数接受块号和指向先前填充了要写入的数据的 32 字节缓冲区的指针。如果缓冲区地址和块号在有效范围内,例程会将数据复制到非易失性保持缓冲区,并将缓冲区标记为准备提交。

提交和回滚函数是可以在写入后执行的互补操作。commit 函数将最近写入的缓冲区复制到其在内存数组中的最终位置,并为要写入的下一个数据集准备缓冲区结构。回滚功能本质上是一个“撤消”。它反转最近写入操作的效果,并为下一次写入准备缓冲区子系统。

检查功能读取存储设备的每个块并验证存储数据的有效性。它还检查缓冲区子系统,以确保没有挂起的写入。任何无效块或任何挂起的写入都会导致检查返回错误条件。

清理功能修复了损坏的EEPROM。特别是,它尝试确定发生了哪些故障以及可以执行哪些操作来解决问题。

有关所有这些功能的更多详细信息,请参阅下面的操作详细信息。

pYYBAGQAXLCAQPJ1AABb7BHvzQg580.gif

图1.EEPROM 阵列的结构。该数组分为三个区域:包含实际用户数据的主数组;为主数组中的每一行包含一个 CRC 的检查数组;以及包含四个缓冲区的缓冲区数组,用于存储临时写入数据。

电子电气结构

有关EEPROM的结构,请参阅上面的图1。EEPROM包含三个主要领域:

主阵列:EEPROM的最大部分专用于数据存储。在 16kB 的设备中,总共有 512 页,每页 32 字节。在这样的设备中,前473页专用于实际数据存储。

检查数组:EEPROM 的第二部分检查主数组中每一行的单词。检查数组的每一页都包含一组 15 位 16 位 CRC 值。每个页面中的最终 CRC 值将检查该页面。校验数组占用 473 页(第 503 页至第 <> 页)。

缓冲阵列:EEPROM 的最后一部分包含 32 页,构成 16 个写入缓冲区。每个缓冲区由四个字段组成:一个数据字段,其中包含要在下一个提交指令处写入主数组的 1 字节数据;标识缓冲区引用的页面地址的地址字段;标识缓冲区状态(即可用、已占用、已过期)的状态字段;以及检查整个写入缓冲区的 <> 位 CRC 字段。有关缓冲结构,请参见上面的图 <>。

这种EEPROM结构满足了设计的大部分主要目标。首先,由于主数组中的每个页面都在辅助位置进行检查,因此页面的所有位都可用于用户数据。其次,由于主数组中的每个页面都由 check 数组中的唯一字进行检查,因此 check 数组中没有单点故障,整个数组中没有必须在每个写入周期更新的单个页面。最后,使用四个写入缓冲区来分配写入周期的磨损。

操作细节

在未受保护的EEPROM中,操作细节很简单。读取周期只是将字节从所选地址传输到主机;写入周期将字节从主机传输到EEPROM,并等待操作完成(在大多数设备中为几毫秒)。然而,在受保护的EEPROM环境中,读取和写入是更复杂的操作。在下一节中,将剖析每个操作,以准确发现调用函数时发生的情况。

poYBAGQAXLGATE8YAAA-2wj3cqg272.gif

图2.读取操作的流程图。

读取操作是最简单的接口函数,但仍然相当复杂。图 2 说明了操作流程:

检查页面地址和缓冲区地址以验证它们是否有效。否则,操作将在此处结束,函数返回无效的缓冲区地址或无效的页码错误。

所选页将读入缓冲区。

计算检查页的地址,并将校验页读入暂存缓冲区。

计算检查页的CRC。如果无效,则返回保护失败错误。

CRC是在数据缓冲区上计算的,并与存储在与读取页对应的暂存缓冲区中的CRC进行比较。如果 CRC 匹配,则例程返回有效读取;如果 CRC 不匹配,则例程返回无效读取。在任何情况下,实际读取的数据都保留在返回缓冲区中,供调用例程根据需要使用。

chaijie_default.png

图3.写入操作的流程图。

如上所述,写入操作实际上并没有写入主数组。相反,写入操作将其数据存储在四个缓冲区之一中。通过这种方式,主数组中的先前数据将被保留,直到确保写入过程的有效性。图 3 中的流程图显示:

检查页面地址和缓冲区地址以验证它们是否有效。否则,操作将在此处结束,函数返回无效的缓冲区地址或无效的页码错误。

读取每个写入缓冲区的状态字段。如果任何缓冲区的状态已占用,则操作将失败并显示写入序列错误。

四个写入缓冲区中的一个应处于过期状态。如果是这样,则激活序列中的下一个缓冲区。

数据将复制到写入缓冲区的数据字段。

页面地址将写入地址字段。计算 CRC 并将其写入 CRC 字段。状态将更新为已占用。以前的缓冲区设置为可用状态(即,从过期更新)。

请注意,此时,读取操作将返回新写入页面的旧值。在提交操作完成之前,不会返回新值。

pYYBAGQAXLOAL9KGAAA0AdC7JZo189.gif

图4.提交操作的流程图。

提交函数不需要任何参数。它唯一的工作是忠实地将数据从写缓冲区传输到主数组,然后标记写缓冲区已过期。提交函数的操作如图 4 所示:

读取每个写入缓冲区的状态字段。正好应该将一个缓冲区标记为已占用。如果不是这样,则函数在此处以写入序列错误结束。

使用CRC检查占用的缓冲区。如果没有匹配项,则会引发数据损坏错误。

提取地址,并将数据写入主数组中的指定页面。

CRC 是跨缓冲区的数据部分计算的。该值保存在临时寄存器中。

检查页面已找到并读取所选主页。

使用先前计算的CRC更新检查页面,并为检查页面计算新的CRC。

检查页将写回检查数组。

写入缓冲区将更新为过期状态。

反转

poYBAGQAXLSAT2KhAAAaPOIREvY166.gif

图5.回滚操作的流程图。

回滚函数(如图 5 所示)是最简单的函数之一。由于主数组不会在写入操作后更新,而只会在提交操作完成后更新,因此回滚只需要使写入缓冲区失效。

读取每个写入缓冲区的状态字段。正好应该将一个缓冲区标记为已占用。如果不是这样,则函数在此处以写入序列错误结束。

所选写入缓冲区的状态字段被赋予值已过期。

检查

pYYBAGQAXLWARec4AAA9z2Rs7EA496.gif

图6.检查操作的流程图。

在任何上电事件中,都应调用检查功能以验证EEPROM是否已准备好接受数据。检查功能将验证存储系统的运行状况并报告遇到的任何错误。它执行图 6 中所示的检查:

读取每个写入缓冲区。验证只有一个缓冲区未处于可用状态。如果只有一个缓冲区包含未定义的状态代码,则返回中断写入错误。如果所有缓冲区都包含未定义的状态代码,则返回未初始化的 EEPROM 错误。

如果只有一个缓冲区包含占用的状态代码,则 CRC 该缓冲区。如果 CRC 失败,则返回中断的写入错误。

检查检查数组的每一页。如果任何行未通过其 CRC 检查,则返回保护失败错误。

最后,根据其存储的 CRC 检查主数组的每一页。如果任何单个页面的 CRC 失败,请标记中断的提交错误。

清理

poYBAGQAXLeADNLXAAAz_AABWXE255.gif

图7.清理操作的流程图。

清理功能可解决EEPROM系统存在的任何问题。当清理退出时,EEPROM 子系统应随时可供使用,无论它处于何种状态。将回滚所有未提交的写入,并完成失败的提交操作。

图 7 显示了清理的工作原理

如果检查返回未初始化的 EEPROM 错误,则初始化 EEPROM。清除所有数据页,并初始化所有检查页。所有写入缓冲区都将被清除并以可用状态写入 - 最后一个写入缓冲区除外,该缓冲区以过期状态初始化。

如果 check 返回中断的写入错误,请查找状态不是可用的一个写入缓冲区。将该状态更改为已过期。

如果 check 返回中断的提交错误,请查找 CRC 不匹配的主页。计算其CRC并更新关联的检查页面。

如果检查返回保护失败,则在提交操作中断后更新检查页。读取与缺陷检查页面关联的所有主页,并刷新检查页面。

安全证明

系统安全性的证明集中在识别写入事务期间的易受攻击时刻。(读取事务本质上是安全的。在读取操作期间不会写入EEPROM的页面,因此数据不会损坏。在确定了这些脆弱时刻之后,人们只需要确定一个恢复过程。如果恢复机制涵盖了所有已识别的漏洞,并且如果我们假设检查/清理周期将是任何可能破坏EEPROM写入周期的操作(例如上电)之后的第一个事件,那么系统是可证明安全的。

通常在大多数串行EEPROM器件中,写操作首先将受影响页面中的每个位设置为已知值,然后更改必须更改的位以写入请求的值。因此,当电源出现故障时,很可能在中断的写入操作期间页面的所有字节都损坏。通常可以通过将新数据写入损坏的页面来从此故障事件中恢复。尽管如此,以前的数据还是会丢失。

写入操作期间的易受攻击时刻是(按时间顺序):

在对数据字段的写入操作期间:如果此时发生电源故障,则检查操作不会检测到错误。正在写入的写入缓冲区仍具有可用状态,并且可用缓冲区不包含有效的 CRC 值。

当前写入缓冲区的写入状态:此操作将状态字段更改为已占用,设置 CRC,并填写写入操作的页面地址。如果此过程中断,则满足以下条件之一:(1) 状态将无效,导致写入错误中断;(2)状态有效,但CRC失败,再次导致写入错误中断;或 (3) 状态和 CRC 字段将有效。在最后一种情况下,系统有一个未提交的写入挂起。可以检测到这种情况,因为一个缓冲区将被占用,另一个缓冲区将过期。如果子系统的其余部分签出,则用户代码可以通过发出提交或回滚操作来继续。无论如何,主阵列和检查数组都是安全的。

将以前的缓冲区状态清除为可用:缓冲区将具有损坏状态或 CRC,下一个缓冲区将被占用。这意味着清除该缓冲区状态的操作已中断,可以提交或回滚。

在写入和提交操作之间:只有一个写入缓冲区具有占用状态,其 CRC 将进行验证。用户代码可以请求提交或回滚。写缓冲数组、检查数组和主阵列是安全的。

提交操作的易受攻击时刻包括:

将数据字段复制到主阵列:如果写入操作中断,则主阵列的一页可能会损坏。check 函数会将 (1) 有效的、占用的写入缓冲区和 (2) 损坏的主数组页的情况标识为中断的提交。写缓冲数组和检查数组将是安全的。在这种情况下,清理将完成提交并返回已清理的系统。即使写入完成,请注意检查操作也会失败,因为检查数组中的 CRC 将与计算的 CRC 不同。

更新检查数组中的CRC:如果对检查数组中的页面的写入操作中断,则整个页面可能会损坏。这意味着主数组中的 15 个页面将具有无效的 CRC 值。但是 check 可以发现这一点,因为 check 数组中的每个页面都有自己的校验和,并且在写入中断后这将失败。在这种情况下,检查将返回保护失败。解决方法是,首先,重新计算所有 15 个受影响页面的 CRC 值。然后将这些值写入检查数组中的页面,以及页面本身的有效 CRC 值。

更新写入缓冲区数组中的状态:如果在状态变量从占用更改为过期时写入周期中断,则整行可能已损坏。但是,检查数组和主数组将保持安全。检查将发现一个页面损坏,并将抛出中断的写入错误。当清理运行时,它将重置写入缓冲区子系统,完成提交操作。

最后,回滚期间的脆弱时刻是:

更新写入缓冲区数组中的状态:类似于提交周期的最终状态,这只是将写入缓冲区中的占用状态重置为过期状态。如果这被中断,检查例程将返回中断的写入,清理将重新初始化整个写入缓冲区数组。同样,检查数组和主数组是安全的。

因此,可以看出,无论何时断电或处理器复位,存储子系统都保持其完整性。电源故障后,存储子系统将返回到准备写入或读取的状态。如果提交操作被中断,子系统将返回到提交或回滚成功的状态。

从这里开始设计

用于MAXQ微控制器的EEPROM存储系统已经完成。系统的增强由各个系统集成商自行决定。尽管如此,还是想到了一些想法:

C 包装器:在大多数 C 方言中,有一种标准方法可以在汇编语言子例程之间传输数据。例如,在 IAR 环境中,参数在低编号累加器中传入和传出。为这些例程创建 C 包装器就像编写函数原型一样简单,因为参数已经在 A[0] 和 A[1] 中传递。在其他 C 环境中,参数在数据堆栈上传递,需要一个简单的包装器子例程。

并发事务:保证写入周期的完整性至关重要,提供一种实现这种完整性的机制对于平台的整体成功至关重要。但是,许多应用程序需要一种机制,通过该机制,可以将一系列写入周期排队,然后作为一个单元执行,并保证要么全部执行,要么不执行。此处介绍的机制不是这样工作的。如果系统正在维护跨多个页的记录,则可以中断写入,以便在恢复后,记录包含包含部分新条目的页和包含部分旧条目的页。避免此问题的一种方法是在执行提交之前允许多个写入操作。此方法并不像听起来那么简单,因为部分提交的事务可能包含新记录片段、旧记录片段和损坏页面的混合。

磨损均衡:闪存文件系统的一项功能,磨损均衡是指虚拟化页面地址的做法,以便频繁写入的页面可以物理地出现在阵列中的任何位置。这种做法的最佳方法并不明显。这是因为最明显的解决方案(位于固定位置的可移动扇区的目录,每次写入一次都会更新)会导致存储目录的页面迅速磨损。相反,目录本身必须虚拟化和分布式,就像数据页一样。

替代几何形状:此处介绍的系统假设 16kB 部分具有 32 字节页面。如果所选部分具有较大的页面(64 字节或 128 字节),则函数仍将工作,但会有一些额外的写入磨损。(更新 32 字节页面的一个 128 字节段将对整个 128 字节页面执行写入。但这些功能不适用于包含较小页面的设备。可以构建一个系统,即时确定特定EEPROM器件的特性,并相应地配置系统参数。

增强的安全性:该系统可防止一种类型的故障:由于电源故障或意外系统重置而导致EEPROM操作中断。但EEPROM器件可能会(偶尔)以其他方式失败。这方面的一个例子是电路噪声或电离辐射引起的软故障。另一个例子是由于一个或多个电池的磨损而导致的硬故障。

处理这些问题的一种方法是计算和维护综合征,而不是简单的CRC检查词。综合征类似于校验字,但包含足够的信息来纠正简单的位错误。最简单的综合征系统可以用日志检查n个数据位2n + 1 个校验位。因此,对于 32 字节(256 位)的页面大小,只有 <> 位的综合征字可以纠正任何单位错误。随着对数据完整性的要求变得更加严格,可以对问题产生更复杂的影响。

结论

外部串行EEPROM提供了一种在微控制器环境中存储非易失性数据的可靠方法。使用此处介绍的技术,即使面对中断的写入周期,串行EEPROM也可以变得可靠。每当数据完整性对应用程序至关重要时,设计人员就应考虑这些技术。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7423

    浏览量

    150779
  • 存储器
    +关注

    关注

    38

    文章

    7422

    浏览量

    163485
  • EEPROM
    +关注

    关注

    9

    文章

    1008

    浏览量

    81300
收藏 人收藏

    评论

    相关推荐

    EEPROM读写操作常见的陷阱

    时,EEPROM数据偶尔会丢失。 原因:在断电时刚好在进行EEPROM操作。解决方法:加大电源滤波电容的容量,增加电压检测功能,当电压偏低时禁止EEPROM写入
    发表于 10-18 14:31

    MAXQ8913芯片结束资料分享

    光学图像稳定器,伺服环路控制,带有扬声器驱动的语音发生器。  MAXQ8913特性  ·高性能、低功耗16位MAXQ® RISC内核  ·单周期、16 x 16硬件乘法/累加操作,带有48位累加器
    发表于 09-28 10:22

    USB收发器的微控制电路MAXQ612相关资料下载

    闪存和6KB数据SRAM。通过安全存储器管理单元(MMU)提供知识产权(IP)保护,该安全MMU可支持多种授权等级配置,保护代码不被复制和进行逆向工程。授权等级使厂商可以提供MAXQ612/M
    发表于 04-19 07:37

    MAXQ环境中编程

    摘要:MAXQ2000微控制器的在线调试与程序装载功能与IAR Embedded Workbench开发环境相结合,为设计者提供C或汇编级的应用开发与测试手段。MAXQ2000基于硬件的调试引擎与自举装载过程在
    发表于 04-23 17:36 16次下载

    MAXQ揭密

    摘要:MAXQ内核是功能强大的、单周期、基于传递触发的CPU。本文通过演示如何根据简单的MOVE操作建立整个指令集来证明MAXQ的强大性能。 MAXQ处理器家族包括功能强大的
    发表于 04-23 16:26 1371次阅读
    <b class='flag-5'>MAXQ</b>揭密

    MAXQ架构的表操作

    摘要:MAXQ微控制器采用Harvard结构。然而,不应该认为MAXQ微控制器也沿袭了Harvard结构通常所具有的局限性—不能访问存储于代码空间的常量。相反,嵌入在每个MAXQ器件中的工具使得
    发表于 04-23 16:40 765次阅读

    利用MAXQ3210进行环境监视

    摘要:在MAXQ系列以及其他嵌入式微控制器中,MAXQ3210独具特色。它把基于EEPROM的代码和数据存储、压电喇叭驱动器、9V稳压器集成在低引脚数封装内。高性能的16位RISC核使其运行速度
    发表于 04-23 17:24 608次阅读

    MAXQ环境EEPROM保护措施

    摘要:在嵌入式微控制器应用中,非易失性存储器是必不可少的。本应用笔记阐述了如何利用基于事务(transaction)的提交-回退(commit-rollback)机制,来保护一个外部EEPROM存储器件的内容
    发表于 04-24 09:09 1666次阅读
    <b class='flag-5'>MAXQ</b><b class='flag-5'>环境</b><b class='flag-5'>下</b><b class='flag-5'>EEPROM</b>的<b class='flag-5'>保护</b>措施

    STM8S_IAR_EEPROM操作

    STM8S 内部eeprom操作,寄存器版
    发表于 08-31 15:24 10次下载

    MAXQ1061加密控制器保护存储安全

    MAXQ1061是用于嵌入式设备的DeepCover®加密控制器。DeepCover嵌入式安全方案采用多重先进的物理安全机制保护敏感数据,提供最高等级的密钥存储安全保护
    的头像 发表于 10-09 05:00 3705次阅读

    eeprom故障是什么意思_EEPROM读写操作常见的陷阱

    EEPROM是电可擦可编程只读存储器的意思,eeprom故障可能是输入输出存储器错误,也可能是输入输出存储器芯片断路、短路或者内部击穿。按照相关协议来看,EEPROM错误的情况多数为A0区间的值由于误
    的头像 发表于 08-04 10:14 4.1w次阅读
    <b class='flag-5'>eeprom</b>故障是什么意思_<b class='flag-5'>EEPROM</b>读写<b class='flag-5'>操作</b>常见的陷阱

    MAXQ环境保护EEPROM操作

    发表于 11-18 23:48 0次下载
    <b class='flag-5'>MAXQ</b><b class='flag-5'>环境</b>中<b class='flag-5'>受</b><b class='flag-5'>保护</b>的<b class='flag-5'>EEPROM</b><b class='flag-5'>操作</b>

    使用MAXQ3210进行环境监测

    MAXQ3210是MAXQ微控制器的低引脚数实现方案,设计用于不需要昂贵微控制器提供的外设支持的应用。虽然MAXQ3210非常适合环境传感器,但它确实是一款通用、高性能、省电的微控制器
    的头像 发表于 03-02 14:15 599次阅读
    使用<b class='flag-5'>MAXQ</b>3210进行<b class='flag-5'>环境</b>监测

    如何使用MAXQ串行驱动器开发应用

    工作台®,这是使用C语言和汇编语言的MAXQ应用的两个集成开发和调试环境。C语言示例代码演示了MAXQ串行驱动器的使用和限制,以及如何使用MAXQ串行驱动器实现RTS/CTS流控制。
    的头像 发表于 03-03 13:47 825次阅读
    如何使用<b class='flag-5'>MAXQ</b>串行驱动器开发应用

    eeprom存储原理、存储结构及读写操作

    EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器)是一种非易失性存储器,可以在不移除电源的情况进行读写
    的头像 发表于 08-05 17:03 1648次阅读