本文介绍了 CPKCOR-RA8D1B 开发套件的相关信息,包括核心板和扩展板资源特点、原理图、参数功能,并完成 FSP 开发环境搭建,通过运行官方 Demo 例程,实现核心板、底板、摄像头模块、显示屏模块的工程测试
瑞萨 RA8D1 套件包括核心板和扩展板,带显示屏和摄像头模块,支持 MIPI-DSI 显示输出接口。 板上除了实现RA8D1 最小系统外,还搭载了实用的外设功能。CPKEXP-EKRA8X1 扩展板和核心板配合,可以方便地评估RA8x1 MCU的大部分功能。
瑞萨提供多种 CPK 开发板和扩展板,各个 CPK 板和目录的对应关系如下:
| 用户手册 | 样例代码 |
|---|---|
| CPKCOR-RA8D1B 核心板 | cpkcor_ra8d1b |
| CPKEXP-EKRA8X1 扩展板 | cpkexp_ekra8x1 |
CPKCOR-RA8D1B 板使用 224BGA 封装的 RA8D1 MCU(U1),支持 MIPI-DSI 显示输出接口。

板上除了实现RA8D1最小系统外,还搭载了实用的外设功能,包括:

在开发板的底面,预留了丰富的扩展接口,包括:
详见:RA-Eco-RA8D1-224PIN-V2.0 | Gitee .









CPKEXP-EKRA8X1 是适用于CPK-RA8x1系列核心板的通用扩展板,扩展板上提供了和EK-RA8x1类似的接口,其中部分接口和EK-RA8x1管脚兼容,可以方便地评估RA8x1 MCU的大部分功能。
此通用扩展板也可作为一个设计样例,当用户有特定的功能需求时,可以自行修改,快速设计出符合需求的原型系统。
Top view

Bottom view

通用扩展板可以配合以下核心板使用:
CPK-RA8x1核心板可以贴装不同类型的RA8x1 MCU,配合通用扩展板时能实现的功能也有所不同,需参考不同核心板 J1 和 J2 接口的信号定义。










所有的扩展接口都可以作为GPIO扩展来使用,但在管脚分布上,同一外设功能的I/O尽量分布在一起。排针接口的规格均为2.54mm间距。
CPKCOR-RA8D1B核心板 + CPKEXP-EKRA8x1扩展板,组成CPK-RA8x1开发套件,本手册以此套件为例,介绍通用扩展板的各个功能。
核心板上RA8x1 MCU的大部分功能管脚都通过2个80Pin的高密高速接口J1/J2连接到扩展板的各个接口,可以进行灵活的配置。 开发板套件在缺省状态下(出厂设置),可以直接使用以下接口。
瑞萨提供CPK-RA8D1B开发板套件的BSP,下载地址:CPKEXP-EKRA8X1 BSP Pack ;
瑞萨提供了 Excel 表格,详细记录 BSP 对应的各个管脚的功能设置
BSP 缺省配置对应的跳线及开关设置如下。
确认设置完成后,即可运行 CEU 样例程序,确认摄像头和显示屏是否工作正常。
详见:cpkexp_ekra8x1 -_overview | ra生态工作室 .
板载 J-Link 调试器,可使用多种环境实现程序调试。
注意:不需要单独安装 e² studio,FSP 平台安装程序会安装 e² studio 和使用 FSP 所需的所有其他工具。
由于这里使用 RA8D1 主控,仅安装 RA 系列软件包即可;
安装工具链时注意勾选官方 Demo 例程所需的 LLVM Embedded Toolchain for ARM ;

如果已安装 e2 studio 软件,需要增加 LLVM 工具链,方法如下:
窗口 - 首选项 - Renesas - Renesas Toolchain Management 页面;添加 按钮,选择工具链解压文件夹,应用并关闭;
工具链安装完成后,可在工程配置时方便地进行选择。
为了测试板载显示屏和摄像头模块,这里直接使用 e^2^ studio 打开官方示例 Demo 工程 ceu_cpkexp_ra8d1_ep,实现工程测试的相关流程。
git clone https://gitee.com/ramcu/cpk_examples.git 克隆官方示例工程;
...\cpk_examples\cpkexp_ekra8x1\ceu_cpkexp_ra8d1_ep\e2studio_llvm ;
设备名称:R7FA8D1BHECBD ;
进入 Stacks 标签页,查看该工程调用的堆栈;

C/C++ 构建 - 设置 - Toolchain,在 Change Toolchain 模块下选择对应的工具链;
应用并关闭,重新构建工程即可。根据 hal_entry.c 给出代码程序对应的流程图

打开主函数所在文件 src\hal_entry.c ,代码如下
#include "hal_data.h"
#include "common_utils.h"
//#include "wave_data111.h"
#include <stdio.h>
#include "ov7725.h"
#include "ceu.h"
#include "board_sdram.h"
#include "graphics.h"
#include "mipi_dsi_ep.h"
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER
uint8_t g_image_vga_sram [ VGA_WIDTH * VGA_HEIGHT * YUV422_BYTE_PER_PIXEL ] ;
extern volatile bool g_vsync_flag;
void hal_entry(void)
{
/* TODO: add your own code here */
fsp_err_t err = FSP_SUCCESS;
/* Initialize SDRAM. */
bsp_sdram_init();
/* Initialize IIC MASTER module */
err = R_IIC_MASTER_Open(&g_i2c_master1_ctrl, &g_i2c_master1_cfg);
/* Handle error */
if(err != FSP_SUCCESS){
APP_PRINT( "** IIC MASTER Open API failed ** \r\n");
}
#if 1
/* Initialize OV7725 camera sensor */
err = ov7725_open();
/* Handle error */
if(err != FSP_SUCCESS){
APP_PRINT( "** ov7725_open API failed ** \r\n");
}
OV7725_Window_Set(VGA_WIDTH, VGA_HEIGHT, 1);
#else
ov5640_init();
ov5640_set_output_format(OV5640_OUTPUT_FORMAT_RGB565);
ov5640_auto_focus_init();
// ov5640_set_test_pattern(OV5640_TEST_PATTERN_COLOR_BAR);
ov5640_set_output_size(VGA_WIDTH,VGA_HEIGHT);
ov5640_set_exposure_level(OV5640_EXPOSURE_LEVEL_8);
#endif
err = ceu_init(g_image_vga_sram, VGA_WIDTH, VGA_HEIGHT);
/* Handle error */
if(err != FSP_SUCCESS ){
APP_PRINT( "** ceu_init API failed ** \r\n");
}
graphics_init();
mipi_dsi_entry();
gp_frame_buffer = gp_single_buffer;
while(1){
/* Swap the active framebuffer */
gp_frame_buffer = (gp_frame_buffer == gp_single_buffer) ? gp_double_buffer : gp_single_buffer;
err = ceu_operation(g_image_vga_sram);
/* Handle error */
if(err != FSP_SUCCESS ){
APP_PRINT( "** ceu_operation API failed ** \r\n");
}
#if(0)
yuv422_to_rgb565(&g_image_vga_sram[0], &g_image_rgb565_sdram_buffer[0], VGA_WIDTH, VGA_HEIGHT);
// YUVtoRGB565(&g_image_vga_sram[0], &g_image_rgb565_sdram_buffer[0], VGA_WIDTH, VGA_HEIGHT);
// yuv422_to_rgb888(&g_image_vga_sram[0], &g_image_rgb565_sdram_buffer[0], VGA_WIDTH, VGA_HEIGHT);
graphics_draw_frame(&g_image_rgb565_sdram_buffer[0], (uint8_t*) gp_frame_buffer, VGA_WIDTH, VGA_WIDTH, VGA_HEIGHT);
#else
graphics_draw_frame(&g_image_vga_sram[0], (uint8_t*) gp_frame_buffer, VGA_WIDTH, VGA_WIDTH, VGA_HEIGHT);
#endif
/* Now that the framebuffer is ready, update the GLCDC buffer pointer on the next Vsync */
R_GLCDC_BufferChange (&g_display_ctrl, (uint8_t*) gp_frame_buffer, DISPLAY_FRAME_LAYER_1);
/* Wait for a Vsync event */
g_vsync_flag = RESET_FLAG;
while (g_vsync_flag);
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
代码结构见流程图,保存并构建工程。
项目资源管理器 窗口的项目文件夹上右键,选择 构建项目 ;
使用 Type-C 数据线连接核心板的 Debug USB 接口和电脑;
右键工程,选择 调试方式 - 调试配置 ,选择编译完成的 _Flat 文件,调试器选择 J-Link ARM;

点击 调试 按钮,进入调试界面,点击菜单栏 运行 按钮执行程序;
当工程运行时,板载 TFT 显示屏在完成色彩显示初始化和自检后,显示摄像头采集画面;

见底部视频。
本文介绍了 CPKCOR-RA8D1B 开发套件的相关信息,包括核心板和扩展板资源特点、原理图、参数功能,并完成 FSP 开发环境搭建,通过运行官方 Demo 例程,实现核心板、底板、摄像头模块、显示屏模块的工程测试,为后续深入开发做好铺垫,也为相关产品的开发设计和快速应用提供了参考。
举报
更多回帖