板子

Q: 闪存上的 non-volatile storage

问:闪存已经是永久存储数据的,为什么在参数标注了 256KB (128kB reserved for non-volatile storage),这意味着一半的空间无法永久存储数据?

答:闪存本身是一种非易失性存储器,这意味着数据即使在断电后也能被永久保存。然而,在某些设备或系统中,闪存的某些部分可能会被特别标记或保留用于特定的非易失性存储需求,这通常是为了系统更新、固件恢复、关键配置数据等目的。

当提到 "256KB (128KB reserved for non-volatile storage)" 时,这里的表述可能存在一些混淆,让我们澄清一下:

  • 全部256KB:整个闪存区域都是非易失性的,也就是说,任何存储在这256KB空间内的数据在断电后都会保留。

  • 128KB保留区域:在这256KB中,有128KB被特别标记为用于存储关键的系统数据或固件,以确保这些数据在系统更新或重置时不会被覆盖或丢失。这部分空间是闪存的一个子集,专门用于非易失性存储。

  • 剩余的128KB:剩余的128KB闪存空间可能用于用户程序、临时数据或其他数据,这些数据可能在系统重置或固件更新时被清除。尽管这部分空间也是非易失性的,但它们可能不像保留区域那样受到保护。

因此,这里的“volatile”可能不是在描述闪存的物理特性,而是指系统如何使用这些闪存空间。在这个上下文中,“volatile”可能意味着“易变的”或“可能会被系统操作覆盖的”,而不是指物理上的易失性。换句话说,除了128KB的保留区域外,其余的闪存空间可能用于更灵活的存储需求,而这些需求可能不保证数据在所有情况下的持久性。

为了避免混淆,更准确的表述可能是:“256KB的闪存,其中128KB被特别保留用于关键的非易失性存储,其余的128KB用于其他存储需求,可能在系统更新或重置时被清除。”这样,整个256KB的闪存仍然都是非易失性的,但有一部分被特别保护,用于存储关键数据。

LSM303AGR

LSM303AGR 是一款由 STMicroelectronics(意法半导体)生产的六轴惯性传感器模块,集成了 3D 数字磁力计和 3D 数字加速度计。以下是关于 LSM303AGR 的一些关键特性和功能:

  1. 超低功耗:LSM303AGR 设计用于低功耗应用,具有多种工作模式,包括智能睡眠唤醒功能,以进一步降低功耗。

  2. 多种工作模式:它支持不同的功耗模式,包括高分辨率模式和低功耗模式,其中在组合低功耗模式下,功耗不超过 60 µA。

  3. 数字接口:LSM303AGR 提供数字 I2C 和 3 线 SPI 接口标准输出,支持标准、快速模式、快速模式加和高速模式,最高可达 3.4 MHz。

  4. 加速度测量范围:它提供不同的线性加速度 full scales,包括 ±2g/±4g/±8g/±16g。

  5. 磁场动态范围:磁力计的磁场动态范围为 ±50 gauss。

  6. 中断信号:可以配置系统生成自由落体、运动检测和磁场检测的中断信号。

  7. 独立使能/禁用:磁力计和加速度计模块可以独立地被使能或置于省电模式。

  8. 宽温度范围:保证在 -40 °C 至 +85 °C 的扩展温度范围内工作。

  9. 封装类型:LSM303AGR 通常采用塑料 land grid array (LGA) 封装。

  10. 应用场景:适用于需要精确运动检测和方向感知的应用,如电子罗盘、运动跟踪、定位系统等。

在实际应用中,开发者可能会使用 LSM303AGR 进行硬件连接、数据获取和处理。例如,通过 I2C 接口配置 LSM303AGR 的寄存器,设置加速度计的工作模式和输出速率,并读取加速度数据进行积分处理,从而得到速度和位移信息。然而,需要注意的是,使用加速度计数据进行双重积分来计算距离可能存在累积误差,需要通过其他方式进行校准。

此外,还有针对 LSM303AGR 磁场传感器的测评,指出在较大磁场测量中,LSM303AGR 的测量是有意义的,但在微小磁场检测中可能不适用,因为其性能可能不如采用磁致伸缩和巨磁阻抗材料的传感器。

STM32F103C8 / STM32F103RC

STM32F103C8 和 STM32F103RC 是 STMicroelectronics 公司生产的基于 ARM Cortex-M3 内核的微控制器,属于 STM32F1 系列。这些微控制器广泛应用于各种嵌入式系统设计中,但它们之间存在一些差异,主要体现在封装类型、存储容量和可能的一些特性上:

  1. 封装类型

    • STM32F103C8:通常指的是 LQFP(Low Profile Quad Flat Package)封装,8 表示有 8 个引脚。
    • STM32F103RC:可能指的是更大的封装,如 LQFP-64,这里的 "C" 和 "R" 通常表示不同的封装选项和引脚数量。
  2. 闪存容量

    • STM32F103C8:具有 64 KB 的闪存。
    • STM32F103RC:具有 256 KB 的闪存。这里的 "R" 通常表示更高的存储容量。
  3. SRAM容量

    • 两者的 SRAM 容量可能相同,但具体数值需要查看具体数据手册。
  4. 工作频率

    • 两者的 CPU 工作频率可能相同,但也可能因型号而异。STM32F1 系列的 Cortex-M3 内核通常有一个最大工作频率。
  5. I/O 引脚数量

    • 封装类型不同导致 I/O 引脚数量不同,LQFP-64 封装的微控制器有更多的引脚。
  6. 特性和功能

    • 两者可能在一些特性和功能上有所不同,例如外设的种类和数量,这取决于具体的应用需求。
  7. 应用场景

    • 根据存储容量和引脚数量的不同,它们可能适用于不同的应用场景。例如,具有更多闪存的 STM32F103RC 可能更适合需要存储更多程序代码的应用。
  8. 成本

    • 通常具有更大存储容量和更多引脚的微控制器成本会更高。
  9. 数据手册和参考

    • 为了了解具体的技术规格和差异,应查阅 STMicroelectronics 提供的数据手册和参考设计。

请注意,上述信息是基于型号命名习惯的一般解释,具体的差异和特性需要通过查阅 STM32F103C8 和 STM32F103RC 的官方数据手册来确定。

SWD 调试接口

SWD(Serial Wire Debug)是一种用于ARM微控制器的串行调试接口,它提供了一种简单而高效的通信方式,用于芯片的调试和编程。以下是SWD接口的一些关键特点:

  1. 简化的硬件设计:SWD接口只需要两根线,分别是SWDIO(串行数据线)和SWDCLK(串行时钟线),这简化了硬件设计,减少了对单片机GPIO口的占用。

  2. 高速通信:SWD使用串行通信,相比JTAG等并行接口,SWD通常提供更快的数据传输速度。

  3. 低功耗:由于使用较少的引脚和高效的通信方式,SWD接口通常具有较低的功耗。

  4. 易于集成:SWD接口的简化特性使其更容易集成到资源受限的系统中。

  5. 支持复杂系统:尽管SWD接口简化了硬件设计,但它仍然支持复杂的调试任务,包括读取和写入寄存器、访问内存、执行操作指令等。

  6. 与JTAG的兼容性:在某些情况下,SWD接口可以与JTAG接口共享引脚,实现两种接口的复用。

  7. 广泛应用:SWD接口被广泛应用于ARM Cortex系列微控制器中,包括Cortex-M3、Cortex-M4、Cortex-M7等。

  8. 调试工具支持:大多数现代的调试工具和仿真器,如J-Link、ULink、ST-LINK等,都支持SWD接口。

  9. 通信实现:SWD接口的通信可以通过纯GPIO模拟实现,也可以利用SPI等硬件加速实现。

  10. 协议解析:SWD协议允许通过传输数据包来读写芯片的寄存器,包括DP(Debug Port)和AP(Access Port)寄存器。

SWD通常只需要两根线来实现功能,具体如下:

  1. SWDIO(Serial Wire Data Input/Output)

    • 这是数据线,用于传输数据到微控制器的调试接口,以及从调试接口接收数据。
  2. SWCLK(Serial Wire Clock)

    • 这是时钟线,用于提供同步信号,控制数据传输的时序。

除了这两根必需的线,SWD接口可能还包括以下可选的连接:

  1. GND(Ground)

    • 接地线,为SWD接口提供共同的参考电位。
  2. VDD/VDDIO(Power Supply)

    • 电源线,为SWD接口提供所需的电源电压。某些情况下,SWDIO线可能同时承载电源和数据信号,这种情况下不需要单独的电源线。
  3. SWO(Serial Wire Output)

    • 可选的串行输出线,用于输出跟踪数据,例如ITM(Instrumentation Trace Macrocell)数据。
  4. nRESET(Reset)

    • 可选的复位线,用于对微控制器进行硬件复位。

在实际应用中,SWD接口的实现可能因微控制器型号和开发板设计而异。一些开发板可能已经将SWD接口的引脚引出至板子的边缘,方便直接连接SWD调试器。在某些情况下,可能需要使用转接板或杜邦线(跳线)来连接SWD调试器和微控制器。

SWD接口因其简单性、低功耗和高速性能,被广泛应用于现代微控制器的调试和编程中。

ST-LINK 是由 STMicroelectronics(意法半导体)为其 STM8 和 STM32 系列微控制器设计的一套完整的开发和调试工具。ST-LINK 工具主要用于程序的烧录、调试和测试。以下是 ST-LINK 的一些主要特点:

  1. 编程功能:ST-LINK 可以烧录 Flash ROM、EEPROM、以及其他可编程存储器。

  2. 调试功能:它支持全速运行、单步调试、断点调试等调试方法,允许开发者查看 I/O 状态、变量数据等。

  3. 仿真性能:ST-LINK 通常采用 USB 接口进行仿真调试,提供快速的单步调试和断点响应。

  4. 兼容性:ST-LINK 设计用于与多种 ST 微控制器系列兼容,包括但不限于 STM32。

  5. 接口支持:ST-LINK 支持 JTAG 和 SWD 这两种常用的调试接口。

  6. 版本:ST-LINK 有多个版本,包括基础版、V2、V2.1、V3 等,新版本通常会增加新功能或改进性能。

  7. 软件集成:ST-LINK 与 STM32CubeIDE、Keil、IAR 等集成开发环境(IDE)紧密集成,提供无缝的调试体验。

  8. 硬件特性:ST-LINK 硬件可能包括不同的引脚配置和接口选项,以适应不同的开发板和应用需求。

  9. 社区和支持:ST-LINK 拥有广泛的用户社区和 ST 官方的技术支持。

  10. 成本效益:ST-LINK 提供了具有竞争力的价格,使其成为许多开发者和教育机构的首选工具。

ST-LINK 是 STM32 微控制器开发中不可或缺的工具之一,它帮助开发者高效地进行程序开发和硬件调试。随着 STM32 系列产品的不断更新,ST-LINK 也在不断进化以支持新的技术和功能。

J-Link是由德国SEGGER公司推出的一款多功能JTAG/SWD仿真器,主要用于ARM内核芯片的仿真、编程和调试。以下是J-Link的一些关键特点和功能:

  1. 多内核支持:J-Link支持多种ARM内核,包括ARM7/9/11、Cortex-M0/M1/M3/M4、Cortex-A5/A8/A9等。

  2. 集成开发环境兼容性:J-Link能够与IAR、ADS、KEIL、WINARM、RealView等多种集成开发环境无缝连接。

  3. 高速下载:J-Link提供高速的程序下载能力,V9.3版本下载速度最大可达1 MByte/s。

  4. USB供电:J-Link通过USB接口供电,整机电流小于50mA,支持目标板电压1.2~3.3V,且兼容5V。

  5. 目标板供电:J-Link可以为某些目标板提供4.5~5V的电源,最大供电电流可达300mA,并具有过流保护功能。

  6. 多种接口速度:J-Link支持最高15MHz的JTAG速度和最高7.5MHz的SWO采样频率。

  7. 即插即用:J-Link是完全即插即用的,使用USB连接,方便与PC机连接。

  8. 多版本选择:J-Link有多个版本,包括J-Link Plus、J-Link Ultra、J-Link Ultra+、J-Link Pro、J-Link EDU等,以满足不同用户的需求。

  9. 支持多JTAG器件串行连接:J-Link支持通过JTAG接口将多个设备串行连接,方便同时调试多个芯片。

  10. TCP/IP网络功能:J-Link带有TCP/IP服务器功能,允许通过TCP/IP网络使用J-Link。

  11. 操作简便:J-Link操作方便、连接方便、简单易学,适合学习和开发ARM。

  12. 电气参数:J-Link对数据输入上升时间、下降时间,以及时钟上升时间、下降时间都有严格的规定,确保信号的稳定性和可靠性。

J-Link是嵌入式系统开发中常用的工具之一,其强大的功能和良好的兼容性使其成为许多工程师的首选仿真器。

睡眠/待机模式

STM32微控制器提供了多种低功耗模式,以适应不同的应用场景和节能需求。其中,睡眠模式(Sleep mode)和待机模式(Standby mode)是两种常见的低功耗模式,它们有以下主要区别:

  1. 功耗水平

    • 睡眠模式:功耗低于正常运行模式,但高于待机模式。在睡眠模式下,微控制器的时钟系统依然可以运行,允许更快地唤醒。
    • 待机模式:功耗最低,微控制器几乎所有功能都被停止,仅保留备份寄存器和备份SRAM等。
  2. 唤醒速度

    • 睡眠模式:由于部分电路仍然活跃,从睡眠模式唤醒到正常运行模式的速度较快。
    • 待机模式:由于大部分电路被关闭,从待机模式唤醒到正常运行模式需要更长的时间。
  3. 时钟状态

    • 睡眠模式:PLL(相位锁定环)、HSI(内部高速时钟)和HSE(外部高速时钟)可以保持激活状态,但CPU和外设时钟被关闭。
    • 待机模式:所有时钟,包括内部和外部时钟,都被关闭。
  4. 外设功能

    • 睡眠模式:允许某些外设继续工作,如定时器、RTC(实时时钟)等。
    • 待机模式:大多数外设被停止,只有极少数可以配置为在待机模式下继续工作。
  5. 使用场景

    • 睡眠模式:适用于需要快速响应中断的应用,如按键扫描、定时器中断等。
    • 待机模式:适用于对功耗要求极高的应用,如使用电池供电的便携设备。
  6. 退出方式

    • 睡眠模式:通常由中断或事件(如外部中断、看门狗事件等)唤醒。
    • 待机模式:通常由外部唤醒源(如外部中断、RTC事件等)唤醒。
  7. 系统状态

    • 睡眠模式:系统状态大部分保持不变,CPU和外设处于暂停状态,但系统时钟仍在运行。
    • 待机模式:系统状态被最小化,除了备份区域,大部分系统功能被关闭。

开发者在选择STM32的低功耗模式时,需要根据应用的具体需求和特点来决定使用哪种模式,以实现最佳的能效比。

问:待机模式会关闭时钟,那么唤醒之后,如何保持时间准确?

答:在待机模式(Standby mode)下,虽然大部分时钟系统确实会被关闭,以降低功耗,但微控制器通常会有一些特殊的机制来保持时间的准确性,特别是在涉及到唤醒时间或定时操作时。以下是一些确保时间准确性的常见方法:

  1. 备份寄存器和备份SRAM

    • 在待机模式下,微控制器的备份寄存器和备份SRAM通常由一个独立的电源(通常是电池)供电,因此它们可以保持内容,包括时间信息。
  2. 实时时钟(RTC)

    • RTC是一个特殊的时钟系统,它可以在微控制器的其它部分处于低功耗模式时继续运行。RTC通常有自己的时钟源(如LSE - 低速度外部时钟或LSI - 低速度内部时钟),并且可以独立于主时钟系统运行。
  3. RTC唤醒功能

    • 微控制器可以配置RTC来生成唤醒事件,即使在待机模式下也能准时唤醒微控制器。例如,RTC可以配置为在特定时间间隔或特定时间点触发唤醒。
  4. 看门狗定时器

    • 某些微控制器的看门狗定时器可以在低功耗模式下继续计数,并在到期时唤醒微控制器。这可以作为一种安全机制,确保微控制器不会在低功耗状态下停留过长时间。
  5. 外部唤醒源

    • 微控制器可能允许外部事件(如外部中断或GPIO状态变化)来唤醒它。如果这些事件与时间相关,它们可以用于确保微控制器在正确的时间被唤醒。
  6. 时钟安全系统

    • 一些微控制器具有时钟安全系统,可以在时钟系统被关闭后再重新启动时钟,确保系统时钟的准确性。
  7. 软件补偿

    • 在某些情况下,软件可以补偿由于低功耗模式导致的时钟暂停。例如,软件可以记录进入低功耗模式前的时间,并在唤醒后计算经过的时间。

因此,尽管待机模式会关闭大部分时钟,但通过上述机制,微控制器仍然可以保持时间的准确性,并在需要时准时唤醒。开发者需要根据具体的应用需求和微控制器的特性来选择合适的方法。

OpenOCD

OpenOCD是一个开源的软件,用于提供对各种微控制器和系统级芯片(SoC)的调试、编程和系统分析功能。它支持多种架构和处理器,包括ARM、AVR32、MIPS、MicroBlaze、NDS32、PowerPC、RISC-V、STM32、Xilinx Zynq等。

以下是OpenOCD的一些关键特性:

  1. 多架构支持:OpenOCD可以与多种不同的微控制器和处理器架构配合使用。

  2. JTAG/SWD接口:支持通过JTAG和SWD接口进行调试,这两种接口是嵌入式系统调试中最常用的硬件接口。

  3. 命令行界面:OpenOCD提供了一个命令行界面,用户可以通过它执行各种调试命令和脚本。

  4. 脚本语言:OpenOCD支持使用Tcl脚本语言来编写复杂的调试脚本。

  5. 集成开发环境(IDE)集成:可以与Eclipse、Visual Studio等IDE集成,提供无缝的调试体验。

  6. 多目标支持:可以同时连接多个目标设备进行调试。

  7. 编程支持:除了调试功能外,OpenOCD还支持对设备的Flash和RAM进行编程。

  8. 实时操作系统(RTOS)支持:能够与FreeRTOS、ThreadX等RTOS一起工作。

  9. 性能分析:提供性能分析工具,帮助开发者优化代码。

  10. 社区支持:作为一个开源项目,OpenOCD拥有活跃的社区,用户可以从社区获得帮助和支持。

  11. 跨平台:OpenOCD可以在多种操作系统上运行,包括Linux、Windows和macOS。

  12. 可扩展性:OpenOCD的插件架构允许开发者添加对新硬件的支持。

OpenOCD是嵌入式系统开发中的重要工具,尤其适合需要对硬件进行深入调试和分析的情况。通过OpenOCD,开发者可以更有效地开发和调试他们的嵌入式应用程序。