[原创] 【瑞萨AI挑战赛】Titan开发板板载调试器的复活

北方   2026-2-3 15:42 楼主

1 如前贴所见,上手就碰了大墙。板载调试器没有啊,

怎么办,先从原理图扒一下,关键就在右侧的调试节点上了。可以通过RST和MD的组合控制,快速实现类似外设BOOT的的启动,这个是 启动一个可以访问boot 内存的USB CDC。

左侧也展示了可以外接JTAG调试器的解决方案,但是看起来这样板载调试器就不用工作了,而且应该断开 R54等电阻,这里接口么有焊接是DNP状态,不到没办法,就先不选择这个方案了。

RESA_31.PNG
对照这个图,其实MD这个test point是可以通过SW2的boot按键来控制的,这样可以不用MD点,用SW2来替代功能
RESA_32.PNG
2 先下载下载器

 

RESA_15.PNG
选择需要安装的程序和驱动
RESA_16.PNG
3 浅坑一个
首先,在这里读原理图出现一个错误。创建一个下载工程,选择串口作为下载通道,点击连接显示下载失败。
RESA_17.PNG
复盘一下,按着boot键加电,就直接出现了一个USB串口。但是这个不是最后需要的那个串口,然后配合的是板载的SW1reset键,但是这个的reset是对于板载主芯片的复位键,对于调试器的芯片,是RES,还是需要板载的RES 测点来访问。如原理图中黄色圈的部分。
RESA_18.PNG
4 正确的姿势
选择合适的引线,这里只用了一根鳄鱼夹线,一头找到外接电源的GND地线。另一头直接接触RST测试点。boot使用SW2按键
 
IMG_20260203_152616.jpg
IMG_20260203_152305.jpg
整个过程中BOOT都需要接地,也就是一直按着不能松手,然后RES点短暂接地,这是就会显示找到USB BOOT(CDC)接口,顺利显示连接成功。

 

RESA_19.PNG
随后要erase内存,选择target device的initiate device开始擦除,显示成功。
RESA_20.PNG
然后从rt-thread论坛找到这个下载的bin文件,就是可以驱动titan的jlink OB,直接刷写,找到的bin文件,并从0xH开始写入
RESA_22.PNG
点击start,直到成功。
RESA_23.PNG
这是就出现了Jlink的驱动
RESA_24.PNG
刷写过程需要出现下述端口就是OK
RESA_25.PNG
5 写入点灯,创建代码

#include <rtthread.h>
#include "hal_data.h"
#include <rtdevice.h>
#include <board.h>

#define DBG_TAG     "led"
#define DBG_LVL     DBG_LOG
#include <rtdbg.h>

/* 配置 LED 灯引脚 */
#define LED_PIN_R   BSP_IO_PORT_00_PIN_13
#define LED_PIN_B   BSP_IO_PORT_00_PIN_12
#define LED_PIN_G   BSP_IO_PORT_06_PIN_13

/* 定义 LED 亮灭电平 */
#define LED_ON  (0)
#define LED_OFF (1)

/* 定义 8 组 LED 闪灯表,其顺序为 R B G */
static const rt_uint8_t _blink_tab[][3] =
{
    {LED_OFF, LED_OFF, LED_OFF},
    {LED_ON,  LED_OFF, LED_OFF},
    {LED_OFF, LED_ON,  LED_OFF},
    {LED_OFF, LED_OFF, LED_ON},
    {LED_ON,  LED_OFF, LED_ON},
    {LED_ON,  LED_ON,  LED_OFF},
    {LED_OFF, LED_ON,  LED_ON},
    {LED_ON,  LED_ON,  LED_ON},
};

void hal_entry(void)
{
    rt_kprintf("\nHello RT-Thread!\n");
    rt_kprintf("==================================================\n");
    rt_kprintf("This example project is an RGB flicker routine!\n");
    rt_kprintf("==================================================\n");

    unsigned int count = 0;
    unsigned int group_num = sizeof(_blink_tab)/sizeof(_blink_tab[0]);
    unsigned int group_current;

    /* 设置 RGB 灯引脚为输出模式 */
    rt_pin_mode(LED_PIN_R, PIN_MODE_OUTPUT);
    rt_pin_mode(LED_PIN_G, PIN_MODE_OUTPUT);
    rt_pin_mode(LED_PIN_B, PIN_MODE_OUTPUT);
    rt_pin_write(LED_PIN_R, LED_OFF);
    rt_pin_write(LED_PIN_G, LED_OFF);
    rt_pin_write(LED_PIN_B, LED_OFF);

    do
    {
        /* 获得组编号 */
        group_current = count % group_num;

        /* 控制 RGB 灯 */
        rt_pin_write(LED_PIN_R, _blink_tab[group_current][0]);
        rt_pin_write(LED_PIN_B, _blink_tab[group_current][1]);
        rt_pin_write(LED_PIN_G, _blink_tab[group_current][2]);

        /* 输出 LOG 信息 */
        LOG_D("group: %d | red led [%-3.3s] | | blue led [%-3.3s] | | green led [%-3.3s]",
            group_current,
            _blink_tab[group_current][0] == LED_ON ? "ON" : "OFF",
            _blink_tab[group_current][1] == LED_ON ? "ON" : "OFF",
            _blink_tab[group_current][2] == LED_ON ? "ON" : "OFF");

        count++;

        /* 延时一段时间 */
        rt_thread_mdelay(500);
    }while(count > 0);
}

编译一下,迅速成功

RESA_27.PNG
连接串口,显示3色灯循环逻辑
RESA_30.PNG

效果如下

IMG_20260203_152721.jpg

 

视频如下

VID_20260203152705

 

5 小结

这个板子拿到手就给出了个题目,搞了一通,还好通过了。算是搞了一个出厂工序。加深了对于boot sequence的理解

 

回复评论 (1)

编译一下迅速成功

恭喜大佬介绍的这么细,效果不错

点赞  2026-2-3 18:33
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复