Power's Wiki -

HAL 库开发笔记 - DMA

DMA(Direct Memory Access,直接存储器访问)允许不同速度的硬件装置直接沟通,而不需要依赖于 CPU 的大量中断负载。 基本原理 DMA 是什么 DMA 提供外设 / 存储器或存储器 / 存储器之间的高速数据传输,其过程中无需占用 CPU 资源。 如上图所示,STM32F4 系列有两个 DMA 控制器,共 12 通道(DMA1 有 7 个,DMA2 有 5 个)。DMA 控制器与 Cortex-M3 核心共享系统的数据总线。 简单地理解,当 CPU 懒得把一大串数据转移到另一个地方,或者说它还有更重要的事情要做的时候,就可以把这个任务丢给 DMA 去干,DMA 干完 / 出问题了跟 CPU 说一声就行。 DMA 的使用场景 串口通讯:最常见的使用情况,当有大量数据从串口读入或者写入的时候,让 DMA 处理。这样可以将 CPU 解放出来,让 CPU 处理更重要的事情。 ADC:一般在需要 ADC 时的通道扫描模式下,可以用 DMA 处理。 SD 卡读写:需要往 SD 卡里面读写大量数据的时候,一般也用 DMA 来处理。 DMA 的传输方向 P2P(Peripheral to Peripheral,从外设到外设)。 P2M(Peripheral to Memory,从外设到内存):一般用于传感器通过串口发送读数回单片机。 M2P(Memory to Peripheral,从内存到外设):一般用于单片机通过串口发送数据到执行器。 M2M(Memory to Memory,从内存到内存):MCU 内部的数据转移,常见于 Buffer 之间互相转移数据,或者从 Buffer 读写数据。只有 DMA2 能够进行 M2M 操作。 DMA 的传输模式 DMA_Mode_Normal:正常模式。任务完成后就停止 DMA,如果还需使用,要再次手动启动。 DMA_Mode_Circular: 循环传输模式。当传输结束时,硬件自动会将传输数据量寄存器进行重装,进行下一轮的数据传输。 常用的 DMA 函数参考 串口 DMA 发送数据 c HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) 功能:串口通过 DMA 发送指定长度的数据。 参数: UART_HandleTypeDef *huart:UATR 的别名(如 : UART_HandleTypeDef huart1 -> huart1) *pData:需要发送的数据 Size:发送的字节数 例子: c HAL_UART_Transmit_DMA(&huart1, (uint8_t *)Senbuff, sizeof(Senbuff)); //串口发送 Senbuff 数组 串口 DMA 接收数据 c HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) 功能:串口通过 DMA 接收指定长度的数据。 参数: UART_HandleTypeDef *huart:UATR 的别名(如 : UART_HandleTypeDef huart1 -> huart1) *pData:需要存放接收数据的数组 Size:接收的字节数 例子: c HAL_UART_Receive_DMA(&huart1, (uint8_t *)Recbuff, sizeof(Recbuff)); //串口接收,存放到 Recbuff 数组 串口 DMA 恢复函数 c HAL_UART_DMAResume(&huart1) 作用:恢复 DMA 的传输 返回值:0(正在恢复);1(已经完成恢复) DMA 串口传输实验 在 CubeMX 内配置 DMA 串口部分的配置请跳转文章 HAL 库开发笔记 - 串口通信。 配置完 USART 引脚和 NVIC 中断后,切换到 DMA Settings 标签页,按照下图进行配置: 点击 Add 添加通道(USART1_RX 与 USART1_TX) 将两个的优先级都设置为 Medium(中优先级) DMA 传输模式为 Normal(正常模式) DMA 内存地址自增,每次增加一个 Byte(字节) 随后,在 System Core 标签页找到 DMA,增加一个 MEMTOMEM 栏目,如图: 在代码内配置 DMA ```c title="main.c" / USER CODE BEGIN Init / uint8_t Senbuff[] = "Serial Output Message by DMA \r\n"; // 自定义发送的字符串 / USER CODE END Init / ...... / USER CODE BEGIN 3 / HAL_UART_Transmit_DMA(&huart1, (uint8_t *)Senbuff, sizeof(Senbuff)); HAL_Delay(1000); } / USER CODE END 3 / ``` 烧录程序,打开串口助手,即可看见循环发送的自定义数组。 参考与致谢 进阶篇 IV [DMA] 【STM32】HAL 库 STM32CubeMX 教程十一 ---DMA (串口 DMA 发送接收) 原文地址:https://wiki-power.com/ 本篇文章受 CC BY-NC-SA 4.0 协议保护,转载请注明出处。

AI生成摘要 DMA(Direct Memory Access,直接存储器访问)允许硬件装置直接通信,无需CPU中断。STM32F4系列有两个DMA控制器,共12个通道。DMA的使用场景包括串口通讯、ADC和SD卡读写。DMA的传输方向包括P2P、P2M、M2P和M2M。DMA的传输模式有正常模式和循环传输模式。常用的DMA函数有串口DMA发送数据、串口DMA接收数据和DMA恢复函数。在CubeMX内配置DMA和在代码内配置DMA的步骤。

相关推荐 去reddit讨论

Power's Wiki -

FreeRTOS 开发笔记 🚧

参考与致谢 FreeRTOS(Official Website) STM32F429 FreeRTOS 开发手册 | 正点原子 原文地址:https://wiki-power.com/ 本篇文章受 CC BY-NC-SA 4.0 协议保护,转载请注明出处。 下载安装 首先,跳转官方下载页面 Download FreeRTOS 下载最新的安装器。

AI生成摘要 本文介绍了FreeRTOS的开发笔记,包括参考与致谢以及下载安装的步骤。

相关推荐 去reddit讨论

Power's Wiki -

Homelab - 碎片笔记工具 memos

memos 是一个开源的自托管 memos 工具。支持 Markdown 语法、公开分享、iframe 嵌入、标签管理、日历视图、简单的数据迁移与备份功能。 部署(Docker Compose) 首先创建 compose.yaml 文件,并粘贴以下内容: yaml title="compose.yaml" version: "3.0" services: memos: container_name: ${STACK_NAME}_app image: neosmemo/memos:${APP_VERSION} ports: - ${APP_PORT}:5230 volumes: - ${STACK_DIR}:/var/opt/memos restart: always (可选)推荐在 compose.yaml 同级目录下创建 .env 文件,并自定义你的环境变量。如果不想使用环境变量的方式,也可以直接在 compose.yaml 内自定义你的参数(比如把 ${STACK_NAME} 替换为 memos)。 ```dotenv title=".env" STACK_NAME=memos STACK_DIR=xxx # 自定义项目储存路径,例如 ./memos memos APP_VERSION=latest APP_PORT=xxxx # 自定义访问端口,选择不被占用的即可 ``` 最后,在 compose.yaml 同级目录下执行 docker compose up -d 命令即可启动编排的容器。 配置说明 移动端 iOS/Android App:Moe Memos。还有更多第三方客户端(如微信小程序、浏览器扩展、Telegram Bot 等)请参考文档 contribution·memos。 用户数据的导入导出,可使用 VS Code 插件 SQLite,下载并打开 ${DIR} 下的 memos_prod.db 即可进行增删改查、导入导出备份等操作。注意,只有在 docker 容器关闭 / 重启的时候才会更新 memos_prod.db 文件。 参考与致谢 官网 文档 GitHub repo Docker Hub Demo site 原文地址:https://wiki-power.com/ 本篇文章受 CC BY-NC-SA 4.0 协议保护,转载请注明出处。

AI生成摘要 memos是一个开源的自托管碎片笔记工具,支持Markdown语法、公开分享、iframe嵌入、标签管理、日历视图、简单的数据迁移与备份功能。部署使用Docker Compose,创建compose.yaml文件并粘贴相关内容,执行docker compose up -d命令即可启动容器。移动端可使用Moe Memos App,还有其他第三方客户端可参考文档。用户数据的导入导出可使用VS Code插件SQLite,注意只有在docker容器关闭/重启时才会更新memos_prod.db文件。

相关推荐 去reddit讨论

Power's Wiki -

Homelab - 高质量图片压缩工具 TinyPNG-docker

TinyPNG-docker 是一个调用 TinyPNG API 进行图片高质量压缩的工具,可以自动压缩指定路径下的 WEBP、JPEG 和 PNG 图片,然后输出到你想要的路径下。它能有效减少网站的带宽占用、流量和加载时间。顺带说一句,这是我借助 ChatGPT 开发的一个 Docker 应用。 部署(Docker Compose) 首先创建 compose.yaml ,并将以下的 ${DIR} 替换为本地的目录(例如 /DATA/AppData);将 ${API} 替换为自己申请的 TinyPNG 密钥: yaml title="compose.yaml" version: "3" services: tinypng-docker: image: linyuxuanlin/tinypng-docker environment: - TINYPNG_API_KEY=${API} - INPUT_DIR=/app/input - OUTPUT_DIR=/app/output volumes: - ${DIR}/tinypng-docker/input:/app/input - ${DIR}/tinypng-docker/output:/app/output 配置说明 使用这个 Docker 容器前,你需要先在 TinyPNG 官网上注册一个账户,并申请获取一个 API 密钥。 使用方法很简单,把需要压缩的图片贴进 ${DIR}/tinypng/input 文件夹中,就能在 ${DIR}/tinypng/output 文件夹找到压缩后的图片了。 如果容器无法正常使用,可以用以下的方法排除: 确保 compose.yaml 文件中指定的 input 和 output 文件夹路径正确。 检查你的 TinyPNG 账户,是否已达到 API 密钥允许的最大压缩次数。 检查 input 文件夹是否包含正确格式的图像文件(WebP, PNG, JPEG)。注意,此容器只会检测并压缩 created 事件,因此如果文件已经存在,则需要手动将其移到 input 目录当中。 检查压缩的图片是否在失真度上高于 API 的压缩设置,可能导致 API 解码失败(例如压缩前的图片已经压缩过)。 尝试手动使用 tinify 官网提供的 API 压缩工具,上传压缩后的图片以进一步确定问题的所在,同时你可以在控制台输出调试信息定位问题。 Docker 镜像开发流程 准备工作 如还未注册 Docker Hub 账户,则需要先在 Docker Hub 上创建一个账户。 登录 Docker Hub: shell docker login 根据提示输入用户名和密码,登录到 Docker Hub。 创建容器 创建 Dockerfile 文件: ```Dockerfile title="Dockerfile" FROM python:3.8-slim-buster RUN pip install tinify watchdog WORKDIR /app COPY . /app ENV TINYPNG_API_KEY= ENV INPUT_DIR=/app/input ENV OUTPUT_DIR=/app/output CMD ["python", "main.py"] ``` 在相同路径下创建 main.py: ```py title="main.py" import tinify import os import time import sys from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler class MyHandler(FileSystemEventHandler): def on_created(self, event): if event.is_directory: return None elif event.event_type == 'created': print("Received created event - %s." % event.src_path) source_path = event.src_path output_path = os.path.join(os.environ['OUTPUT_DIR'], os.path.basename(source_path)) compress_image(source_path, output_path) def compress_image(source_path, output_path): tinify.key = os.environ['TINYPNG_API_KEY'] source = tinify.from_file(source_path) source.to_file(output_path) print(f"{source_path} compressed and saved to {output_path}") if name == "main": print("Watching for new images...") event_handler = MyHandler() observer = Observer() observer.schedule(event_handler, path=os.environ['INPUT_DIR'], recursive=False) observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join() ``` 这里首先导入必需的 Python 库:tinify,os,time,sys,watchdog。随后定义了一个名为 MyHandler 的类,继承自 watchdog.events.FileSystemEventHandler。这个类包含一个 on_created 方法,当监测到指定文件夹下有新文件被创建时会被调用。on_created 函数获取源图像的路径,并将其压缩到指定的输出路径。最后开始监测输入文件夹,一旦检测到指定文件夹下有新文件被创建,就会自动执行压缩操作,并将压缩后的图像输出到指定的输出文件夹。 编译容器 在 Dockerfile 相同路径下执行以下命令编译容器: shell docker build -t tinypng-docker . 其中,tingpng-docker 为要构建的镜像名称,. 为 Dockerfile 文件所在的路径。 为镜像打标签 使用以下命令为镜像打标签: shell docker tag <image-name> <dockerhub-username>/<repository-name>:<tag> 例如: shell docker tag tinypng-docker linyuxuanlin/tinypng-docker:latest 推送镜像到 Docker Hub 使用以下命令将镜像上传到 Docker Hub: ```shell docker push /: ``` 例如: shell docker push linyuxuanlin/tinypng-docker:latest 拉取镜像 上传完成后,其他人便可以通过以下命令拉取镜像: shell docker pull linyuxuanlin/tinypng-docker:latest 参考与致谢 文档 GitHub repo Docker Hub 原文地址:https://wiki-power.com/ 本篇文章受 CC BY-NC-SA 4.0 协议保护,转载请注明出处。

AI生成摘要 TinyPNG-docker是一个调用TinyPNG API进行图片高质量压缩的工具。它可以自动压缩指定路径下的WEBP、JPEG和PNG图片,并输出到指定路径下。使用前需要在TinyPNG官网注册账户并申请API密钥。部署时需要创建compose.yaml文件,并将其中的${DIR}替换为本地目录,将${API}替换为申请的密钥。使用方法简单,将需要压缩的图片放入指定文件夹中,压缩后的图片会出现在输出文件夹中。如果容器无法正常使用,可以检查文件夹路径、API密钥、图像文件格式和压缩设置等。编译容器时需要创建Dockerfile和main.py文件,并导入必需的Python库。编译完成后可以为镜像打标签并上传到Docker Hub,其他人可以通过拉取镜像使用。

相关推荐 去reddit讨论

Power's Wiki -

Homelab - 轻量服务器管理面板 CasaOS

CasaOS 是一个简单易用、优雅的开源个人面板,功能包含了文件管理器、服务器状态监测、终端、Docker 容器管理、内置 Docker 应用商店等。 部署(shell) shell curl -fsSL https://get.casaos.io | sudo bash 默认面板访问地址:http://localhost:80 注:如果是部署在有分配反向代理的服务器上,最好在设置内更换面板访问端口,把 80 端口留给 Nginx。 参考与致谢 官网 文档 GitHub repo 原文地址:https://wiki-power.com/ 本篇文章受 CC BY-NC-SA 4.0 协议保护,转载请注明出处。

AI生成摘要 CasaOS是一个简单易用、优雅的开源个人面板,功能包含了文件管理器、服务器状态监测、终端、Docker容器管理、内置Docker应用商店等。部署方法是使用shell命令进行安装,访问地址为http://localhost:80。如果部署在有反向代理的服务器上,建议更换面板访问端口。

相关推荐 去reddit讨论

Power's Wiki -

Homelab - 跨设备同步工具 Syncthing

Syncthing 是一款免费开源的文件同步应用程序,可在多个设备间同步文件和文件夹,支持增量同步。我用它将服务器的数据备份到 NAS 上做统一管理。 部署(Docker Compose) 首先创建 compose.yaml 文件,并粘贴以下内容: yaml title="compose.yaml" version: "3" services: syncthing: container_name: ${STACK_NAME}_app image: syncthing/syncthing:${APP_VERSION} hostname: my-syncthing environment: # 需要以 root 权限运行,否则无法读取其他 docker 目录或宿主机 root 目录 - PUID=0 - PGID=0 volumes: - ${APP_SYNC_DIR}:/DATA - ${STACK_DIR}/config:/var/syncthing/config/ ports: - ${APP_PORT}:8384 # Web UI - 22000:22000/tcp # TCP file transfers - 22000:22000/udp # QUIC file transfers - 21027:21027/udp # Receive local discovery broadcasts restart: unless-stopped (可选)推荐在 compose.yaml 同级目录下创建 .env 文件,并自定义你的环境变量。如果不想使用环境变量的方式,也可以直接在 compose.yaml 内自定义你的参数(比如把 ${STACK_NAME} 替换为 syncthing)。 ```dotenv title=".env" STACK_NAME=syncthing STACK_DIR=xxx # 自定义项目储存路径,例如 ./syncthing syncthing APP_VERSION=latest APP_PORT=xxxx # 自定义访问端口,选择不被占用的即可 APP_SYNC_DIR=xxxx # 自定义需要同步的路径,比如 /DATA ``` 最后,在 compose.yaml 同级目录下执行 docker compose up -d 命令即可启动编排的容器。 配置说明 如果提示权限不足,可尝试将 PUID 与 PGID 值都修改为 0,用 root 权限启动。 参考与致谢 官网 文档 论坛 GitHub repo Docker Hub 原文地址:https://wiki-power.com/ 本篇文章受 CC BY-NC-SA 4.0 协议保护,转载请注明出处。

AI生成摘要 Syncthing是一款免费开源的文件同步应用程序,可在多个设备间同步文件和文件夹。使用Docker Compose部署,创建compose.yaml文件并配置环境变量,然后执行docker compose up -d命令启动容器。如果权限不足,可以将PUID和PGID值修改为0以root权限启动。

相关推荐 去reddit讨论

Power's Wiki -

HAL 库开发笔记 - GPIO

基本原理 GPIO 是 通用输入输出端口(General Purpose Input Output)。 拿 F103C8T6 芯片举个例子(上图),除了有颜色的引脚(电源和某些功能引脚)之外的,都叫 GPIO. 可见其通用程度。 GPIO 的功能是输入 / 输出电信号。我们来看看它的内部结构: 最右边的 I/O 引脚 ,就是实物芯片的引脚。上下的 保护二极管 在一定程度上可防止外部不正常电压经引脚烧毁芯片。 红色虚线框内是输入功能(芯片读取外部信号)。两个带开关的上拉 / 下拉电阻,是用来实现上下拉输入功能的。如果两个开关都不闭合,我们则称其为浮空输入(上不顶天下不着地,没有参考电平)。这三种输入模式读出来的都是数字量(高 / 低电平)。此外,还有模拟输入功能,顾名思义就是直接读取引脚上的模拟量。(复用功能输入我们后面再提及)。 蓝色虚线框内是输出功能。输出有 4 种模式:推挽、开漏、复用推挽、复用开漏。 输入输出模式 输入模式: 浮空输入:既不上拉也不下拉, STM32 复位之后的默认模式。 上拉输入:闭合上拉电阻的开关,使参考电平永远保持在高位,当输入信号为低电平时就触发。 下拉输入:闭合下拉电阻的开关,使参考电平永远保持在低位,当输入信号为高电平时就触发。 模拟输入:这个模式下,既不上拉也不下拉,也不经过 TTL 触发器,STM32 直接读取引脚上的模拟信号。 输出模式: 开漏输出:开漏指的是开下方的 N-MOS 管的漏极(上面的引脚),这个模式仅仅用到下方的 N-MOS 管。我们知道,MOS 管是电压控的元器件。理解为水龙头,给 N-MOS 的栅极(左边的引脚)输入低电平信号时,N-MOS 就导通。 推挽输出:推挽有两种模式,第一种是同时给两个 MOS 管的栅极通低电平,此时 P-MOS 导通而 N-MOS 截止,电流从 VDD 流向外部引脚,引脚呈高电平。第二种则相反,同时给两个 MOS 管的栅极通高电平,此时 P-MOS 截止而 N-MOS 导通,电流从外部引脚流向内部的 GND,引脚呈低电平。 复用开漏 复用推挽 常用的 GPIO 函数参考 读取 GPIO 状态,返回高 / 低电平: c GPIO_PinState HAL_GPIO_ReadPin(GPIOx, GPIO_Pin); 写 GPIO 状态,写入高 / 低电平: c HAL_GPIO_WritePin(GPIOx, GPIO_Pin, PinState); 翻转 GPIO 电平: c HAL_GPIO_TogglePin(GPIOx, GPIO_Pin); 点亮 LED 在进行下一步实验之前,需要在 CubeMX 里配置串口下载、时钟等各类参数。 此处不再赘述,请跳转文章 HAL 库开发笔记 - 环境配置 中的方法进行配置。 在 CubeMX 内配置 GPIO 将 LED 相应的 GPIO 口设置为输出,并设置初始电平。 对应到我的板子上,就需要把 PD4 和 PI3 这两个 GPIO 设置为输出(GPIO_Output)。 如果想要上电就点亮,那么根据电路原理图,将初始电位设置为低(Low)。 在代码内配置 GPIO 如果配置之无误的话,上电即可点亮两颗用户 LED. 如果要添加闪灯效果,只需要在主循环的用户代码区域内添加几行代码: ```c title="main.c" / USER CODE BEGIN 3 / HAL_Delay(500); HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_4); HAL_GPIO_TogglePin(GPIOI, GPIO_PIN_3); } / USER CODE END 3 / ``` 即可实现闪灯效果。 按键控灯 在学习了 GPIO 的输出后,我们用按键来学习 GPIO 的输入模式。 在 CubeMX 内配置 GPIO 按照上面的方法配置 LED 所属的 GPIO 端口后,根据板载按键的原理图: 将按键所属的 GPIO(PI8)设置为输入(GPIO_Input)。根据原理图,选择内部上拉(Pull-up)。生成代码。 在代码内配置 GPIO 在主循环的用户代码区域内添加如下代码: ```c title="main.c" / USER CODE BEGIN 3 / if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==0) { HAL_Delay(100); if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==0) { HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET); } }else{ HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET); } } / USER CODE END 3 / ``` 即可实现按下按键开灯,松开按键关灯的效果。 有许多人搞不清楚 GPIO_PIN_SET 和 GPIO_PIN_RESET 是什么意思。其实这两个变量的功能仅仅为设置 GPIO 引脚高 / 低电平。具体灯是开是关,还得看电路原理图。 另外,HAL_Delay(100); 的功能是代码消除按键抖动。不过 HAL_Delay() 函数用的是轮询,会占用资源导致卡机,下一篇文章我们将用硬件中断来解决这个缺陷。 参考与致谢 【STM32】STM32CubeMX 教程二 -- 基本使用 (新建工程点亮 LED 灯) STM32CubeMX 实战教程(二)—— 按键点个灯 原文地址:https://wiki-power.com/ 本篇文章受 CC BY-NC-SA 4.0 协议保护,转载请注明出处。

AI生成摘要 GPIO是通用输入输出端口,可以实现输入和输出电信号的功能。输入模式包括浮空输入、上拉输入、下拉输入和模拟输入,输出模式包括开漏输出和推挽输出。常用的GPIO函数有读取GPIO状态、写入GPIO状态和翻转GPIO电平。在使用按键控制灯光时,可以通过配置GPIO和在代码中添加相应的代码实现按下按键开灯、松开按键关灯的效果。

相关推荐 去reddit讨论

Power's Wiki -

Digital Functional Test 🚧

References & Acknowledgements The Fundamentals Of Digital Semiconductor Testing Fundamentals of Testing Using ATE Original: https://wiki-power.com/ This post is protected by CC BY-NC-SA 4.0 agreement, should be reproduced with attribution. Drive and Compare Timing D0 or Drive On: Start of cycle for each channel D1 or Drive Data: Start of drive pulse for each channel D2 or Drive Return: End of drive pulse for each channel D3 or Drive Off: Time of I/O switch R0 or Compare Start (On): Start of compare window for each channel (window strobe) R1 or Compare End (Off): End of compare window for each channel (window strobe) or edge strobe Troubleshooting of Digital Functional Debug Reduce test frequency. View the actual waveform, modify the position of comparison. Repeat pattern lines for more times in prevent of the influence of setup time. Use Shmoo method to analyze. Switching the order of test execution, in prevent of the interaction between tests. Pay attention to the Pin Electronic Driver Mode Vt, Hi-Z, Largeswing-VT1K or Smallswing-VT? Hi-Z: the balance bridge will be used for driving, and VCOM will be used for current loads. Vt: directly connect to Vt level through a 50Ω resistance. If the DUT output is running at a high speed, using the VT results in fewer reflections seen by the comparator. Check if TDR is calibrated. Defects with pattern itself.

AI生成摘要 数字功能测试的基础知识和故障排除方法。包括驱动和比较时序,故障排除技巧,注意事项等。

相关推荐 去reddit讨论

Power's Wiki -

Contact and Subscribe

{ loading=lazy } { loading=lazy } { loading=lazy }

AI生成摘要 联系和订阅

相关推荐 去reddit讨论

Power's Wiki -

CPR - Fundamental

CPR represents of Core Power Reduction, an adaptive power management technology that determine the optimal product voltage, allow closed loop compensation of DC voltage, temperature variation, process(制程) and aging degradation(老化退化), to optimize device power and performance, CPR core consists of one controller, and a number of sensors embedded into the SoC, to control the VDD level of a chip. The sensors consists of multiple ring oscillators, to estimate the running speed of the chip. Then the controller provide a VDD modification command result to the PMIC, which can be programmed with software.

AI生成摘要 CPR是核心功耗降低的缩写,是一种自适应功耗管理技术,通过确定最佳产品电压,实现直流电压、温度变化、制程和老化退化的闭环补偿,优化设备的功耗和性能。CPR核心由一个控制器和多个嵌入到SoC中的传感器组成,用于控制芯片的VDD电平。传感器由多个环形振荡器组成,用于估计芯片的运行速度。然后,控制器将VDD修改命令结果提供给可编程的PMIC。

相关推荐 去reddit讨论