news 2026/2/1 1:41:40

【瑞萨RA × Zephyr评测】SPI 屏 (SSD1306) + 双路 ADC

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【瑞萨RA × Zephyr评测】SPI 屏 (SSD1306) + 双路 ADC

Zephyr 开发笔记:RA6E2 SPI 屏 (SSD1306) + 双路 ADC

1. 硬件接线表 (根据代码分析)

根据你的app.overlay配置,硬件连接如下。请务必检查物理连线是否一致:

模块功能 (Pin Name)RA6E2 引脚备注
SSD1306D0 (SCK/CLK)P111SPI0 RSPCK (硬件 SPI 时钟)
D1 (MOSI/DIN)P109SPI0 MOSI (硬件 SPI 数据)
RES (Reset)P208GPIO 输出
DC (Data/Cmd)P110GPIO 输出
CS (Chip Sel)P301GPIO 输出
VCC3.3V
GNDGND
ADCAN002P002模拟输入通道 2
AN004P004模拟输入通道 4

注意:你的代码中 D/C 使用的是P110(<&ioport1 10 ...>),而 MOSI 使用的是P109(RA_PSEL(..., 1, 9))。这与常见的 P109/P110 功能互换不同,请确保接线严格对应代码。



2. 软件配置

2.1 项目配置 (prj.conf)

这里启用了 SPI 驱动,并配置了 CFB 字体。

# --- 系统基础 --- CONFIG_STDOUT_CONSOLE=y CONFIG_LOG=y CONFIG_HEAP_MEM_POOL_SIZE=4096 # --- 外设驱动 --- CONFIG_GPIO=y CONFIG_SPI=y CONFIG_ADC=y # --- 显示系统 (SSD1306 SPI) --- CONFIG_DISPLAY=y CONFIG_SSD1306=y CONFIG_SSD1306_DEFAULT_CONTRAST=128 # --- 图形库 (CFB) --- CONFIG_CHARACTER_FRAMEBUFFER=y # 保持默认字体设置,避免字体宏冲突 CONFIG_CHARACTER_FRAMEBUFFER_USE_DEFAULT_FONTS=y # --- 日志级别 --- CONFIG_ADC_LOG_LEVEL_INF=y

2.2 设备树覆盖 (app.overlay)

这是最核心的部分。我们做了两件事:

  1. ADC 配置:添加 P002 和 P004 到 ADC0。
  2. SPI 自定义配置:这是难点。系统默认的spi0可能包含 P109/P110/P111 全套引脚。我们需要定义一个新的引脚组spi0_new_custom只包含SCK 和 MOSI,把其他引脚释放出来给 GPIO 使用。
/* * SSD1306 SPI Overlay for Renesas FPB-RA6E2 */ #include <zephyr/dt-bindings/gpio/gpio.h> #include <zephyr/dt-bindings/pinctrl/renesas/pinctrl-ra.h> / { chosen { zephyr,display = &ssd1306_spi; /* 指定使用 SPI 屏作为主显示 */ }; }; /* 强制开启相关 GPIO 端口控制 */ &ioport1 { status = "okay"; }; &ioport2 { status = "okay"; }; &ioport3 { status = "okay"; }; &pinctrl { /* * 自定义 SPI0 引脚组 * 仅配置 MOSI (P109) 和 SCK (P111) 给 SPI 控制器 * P110 未在此处出现,因此可以被用作普通 GPIO (D/C) */ spi0_new_custom: spi0_new_custom { group1 { psels = <RA_PSEL(RA_PSEL_SPI, 1, 9)>, /* MOSI: P109 */ <RA_PSEL(RA_PSEL_SPI, 1, 11)>; /* SCK: P111 */ drive-strength = "high"; /* 增强驱动能力,提升 SPI 稳定性 */ }; }; /* ADC 引脚配置 */ adc0_default: adc0_default { group1 { psels = <RA_PSEL(RA_PSEL_ADC, 0, 2)>, /* AN002: P002 */ <RA_PSEL(RA_PSEL_ADC, 0, 4)>; /* AN004: P004 */ renesas,analog-enable; }; }; }; &spi0 { status = "okay"; /* 应用我们自定义的引脚配置 */ pinctrl-0 = <&spi0_new_custom>; pinctrl-names = "default"; /* CS 片选引脚 (P301) - 由 SPI 驱动软件控制 */ cs-gpios = <&ioport3 1 GPIO_ACTIVE_LOW>; ssd1306_spi: ssd1306@0 { compatible = "solomon,ssd1306fb"; reg = <0>; /* * SPI 频率: 100kHz 用于调试。 * 如果屏幕刷新太慢,后续可改为 <4000000> (4MHz) 或更高 */ spi-max-frequency = <100000>; width = <128>; height = <64>; segment-offset = <0>; page-offset = <0>; display-offset = <0>; multiplex-ratio = <63>; segment-remap; com-invdir; prechargep = <0x22>; /* D/C 引脚: P110 */ >3. 代码实现 (main.c)

逻辑与 I2C 版本基本通用,因为 Zephyr 屏蔽了底层 SPI/I2C 的差异。只需注意display_dev是通过zephyr,display自动获取的。

#include<zephyr/kernel.h>#include<zephyr/device.h>#include<zephyr/drivers/display.h>#include<zephyr/display/cfb.h>#include<zephyr/drivers/adc.h>#include<stdio.h>#include<zephyr/logging/log.h>LOG_MODULE_REGISTER(main,LOG_LEVEL_INF);/* ADC 定义 */conststructdevice*adc_dev=DEVICE_DT_GET(DT_NODELABEL(adc0));#defineADC_CH2_ID2#defineADC_CH4_ID4staticint16_tm_sample_buffer;/* ADC 初始化辅助函数 */staticintsetup_adc_channel(intid){structadc_channel_cfgcfg={.gain=ADC_GAIN_1,.reference=ADC_REF_INTERNAL,.acquisition_time=ADC_ACQ_TIME_DEFAULT,.channel_id=id,};returnadc_channel_setup(adc_dev,&cfg);}/* ADC 读取辅助函数 */staticintread_adc_val(intid,int16_t*val){structadc_sequenceseq={.channels=BIT(id),.buffer=&m_sample_buffer,.buffer_size=sizeof(m_sample_buffer),.resolution=12,};intret=adc_read(adc_dev,&seq);*val=m_sample_buffer;returnret;}intmain(void){/* 1. 获取显示设备 (自动根据 chosen 节点找到 ssd1306_spi) */conststructdevice*display=DEVICE_DT_GET(DT_CHOSEN(zephyr_display));if(!device_is_ready(display)){LOG_ERR("Display not ready! Check SPI wiring.");return0;}if(!device_is_ready(adc_dev)){LOG_ERR("ADC not ready!");return0;}/* 2. 初始化显示 */display_blanking_off(display);cfb_framebuffer_init(display);cfb_framebuffer_set_font(display,0);// 使用默认字体/* 3. 初始化 ADC */setup_adc_channel(ADC_CH2_ID);setup_adc_channel(ADC_CH4_ID);LOG_INF("System Started: SPI SSD1306 + ADC");charbuf[32];int16_tval2,val4;while(1){/* 读取 ADC */read_adc_val(ADC_CH2_ID,&val2);read_adc_val(ADC_CH4_ID,&val4);/* 串口打印 */LOG_INF("ADC: CH2=%d, CH4=%d",val2,val4);/* 屏幕显示 */cfb_framebuffer_clear(display,false);cfb_print(display,"RA6E2 Monitor",0,0);snprintf(buf,sizeof(buf),"AN002: %d",val2);cfb_print(display,buf,0,16);snprintf(buf,sizeof(buf),"AN004: %d",val4);cfb_print(display,buf,0,32);/* 画个动态条 (简单的可视化) */intbar_w=(val2*100)/4095;structcfb_positionstart={0,50};structcfb_positionend={bar_w,54};cfb_draw_rect(display,&start,&end);cfb_framebuffer_finalize(display);k_sleep(K_MSEC(200));}return0;}

4. 调试常见问题

  1. 屏幕全黑,没反应

    • 检查RES (P208)D/C (P110)接线。SPI 屏如果不复位或 D/C 状态错误,完全不会显示。
    • 检查D1 (MOSI)D0 (SCK)是否接反。
    • 尝试调低spi-max-frequency,例如 100000 (100kHz),确保不是信号质量问题。
  2. ADC 读数不准

    • RA6E2 的模拟地 (AVSS0) 和数字地 (VSS) 必须共地。
    • 如果读数跳动大,可以在 ADC 通道配置中增加zephyr,acquisition-time
  3. 编译报错pinctrl冲突

    • 确保你的 overlay 中&spi0已经覆写了pinctrl-0<&spi0_new_custom>,否则默认的 pinctrl 配置可能会抢占 P110 引脚导致 GPIO 初始化失败。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/29 12:41:42

W2C-1000GW实践案例-Borad Speedscaler

一、蒸汽型冷电联产——五沙(宽原)大数据中心五沙(宽原)大数据中心位于佛山市顺德区五沙工业园内北部&#xff0c;为超A级数据中心。本项目总投资约16亿元&#xff0c; 占地56.9亩&#xff0c;规划1万个机柜能弹性满足客户需求&#xff0c;总规划制冷量19800URT&#xff0c;被列…

作者头像 李华
网站建设 2026/1/29 12:41:42

ComfyUI Manager界面按钮消失3步速效修复指南:从零到精通

ComfyUI Manager界面按钮消失3步速效修复指南&#xff1a;从零到精通 【免费下载链接】ComfyUI-Manager 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Manager 亲爱的ComfyUI用户们&#xff0c;当您发现熟悉的Manager界面按钮突然消失时&#xff0c;是不是感到…

作者头像 李华
网站建设 2026/1/29 14:56:07

【一句话概述】前端性能优化从页面加载到展示

【一句话概述】前端性能优化从页面加载到展示 一句话总结&#xff1a; 优化本质是做减法&#xff08;减请求、减体积、减计算&#xff09;和做缓存&#xff08;存起来下次直接用&#xff09;。 可选方案 网络层面&#xff1a; 减少请求数&#xff1a;合并文件、雪碧图 → 减少T…

作者头像 李华
网站建设 2026/1/29 12:41:50

Windows驱动管理利器:Driver Store Explorer完全指南

Windows驱动管理利器&#xff1a;Driver Store Explorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否曾因驱动冲突导致硬件无法正常工作&#xff1f;是否苦恼于…

作者头像 李华
网站建设 2026/1/29 13:03:52

38、安全漏洞利用代码案例分析

安全漏洞利用代码案例分析 1. InlineEgg I 案例分析 1.1 概述 InlineEgg 是由 CORE SDI 的研究人员开发的,旨在为他们的产品套件实现一个动态且可扩展的漏洞利用框架。它可以为多个平台上的多个系统调用创建 shellcode,并且能在 Python 脚本中快速使用。其 shell 创建技术…

作者头像 李华
网站建设 2026/1/29 14:46:53

LaTeX学术报告模板:用于发表关于ACE-Step模型的研究成果

LaTeX学术报告模板&#xff1a;用于发表关于ACE-Step模型的研究成果 在AI生成内容浪潮席卷创意产业的今天&#xff0c;音乐创作正经历一场静默却深刻的变革。过去需要数年训练才能掌握的作曲技巧&#xff0c;如今通过一个文本提示或一段旋律输入&#xff0c;就能由算法自动生成…

作者头像 李华