RT-Thread论坛
直播中

大菠萝Alpha

3年用户 667经验值
擅长:嵌入式技术
私信 关注
[作品]

【Vision Board创客营连载体验】RA8D1 Vision Board上的SPI实践

感谢发烧友&RT-Thread,很高兴能加入Vision Board创客营,体验Vision Board!
本次测试任务是RT-Thread SPI功能验证。

一、简介

Vision-Board 开发板是 RT-Thread 推出基于瑞萨 Cortex-M85 架构 RA8D1 芯片,为工程师们提供了一个灵活、全面的开发平台,助力开发者在机器视觉领域获得更深层次的体验。
RA25.png

Vision Board搭载全球首颗 480 MHz Arm Cortex-M85芯片,拥有Helium和TrustZone技术的加持。SDK包里集成了OpenMV机器视觉例程,配合MicroPython 解释器,使其可以流畅地开发机器视觉应用。

二、环境搭建

(一)创建工程

通过RT-Thread官方提供的RT-Studio IDE,开发者可以很轻松的搭建基于Vision-Board开发板的工程。
RA11.png
至于开发板SDK和各种工具(包括ARM CC, PyOCD等)的更新,直接参考官方指南(Vision-Board (rt-thread.org)),比较清楚。

(二)SPI配置

R7FA8D1BHECBD SPI内部框图如下:

RA24.png

因为目的是测试SPI,看了下板子的SPI引出情况,树莓派引脚看了下没硬件SPI,只有几个软SPI没意思,放弃。然后看到RW007的针脚上给了个SPI1,好就这个测试。
RA12.png

需要在RT-Studio中选择打开SPI1总线。
RA14.png

(三)FSP配置

瑞萨的这个RASC功能还是很强大,堪比STM的CubeMX。配置Vision-Board开发板需要更新FSP到5.1版本。在建好后的工程中,打开RASC来配置具体外设驱动。

首先在Pins选项中配置好SPI1相关pin,选择混合模式。
RA21.png

然后在Stacks选项中新建r_spi_b类型的SPI1,具体属性如下:
RA22.png

选择好之后,点击产生工程代码按钮,生成相关驱动源文件。
RA23.png

三、SPI测试

外接SPI设备,或者直接利用已经接上的RW007模组都OK,甚至可以测试SPI主控的外部loopback。

直接短接SPI1的MISO和MOSI针脚,测试数据发送是否能收到。

#define SPI_NAME     "spi10"
#define CS_PIN     BSP_IO_PORT_04_PIN_13

static struct rt_spi_device *spi_dev;
/* attach spi device */
static int rt_spi_device_init(void)
{
    struct rt_spi_configuration cfg;
    rt_hw_spi_device_attach("spi1", SPI_NAME, CS_PIN);
    cfg.data_width = 8;
    cfg.mode   = RT_SPI_MASTER | RT_SPI_MODE_0 | RT_SPI_MSB | RT_SPI_NO_CS;
    cfg.max_hz = 1 *1000 *1000;
    spi_dev = (struct rt_spi_device *)rt_device_find(SPI_NAME);
    if (RT_NULL == spi_dev)
    {
        rt_kprintf("spi sample run failed! can't find %s device!\n", SPI_NAME);
        return -RT_ERROR;
    }
    rt_spi_configure(spi_dev, &cfg);
    return RT_EOK;
}
INIT_APP_EXPORT(rt_spi_device_init);
/* spi loopback mode test case */
static int spi_sample(int argc, char **argv)
{
    rt_uint8_t t_buf[32], r_buf[32];
    int i = 0;
    static struct rt_spi_message msg1;
        for (i = 0; i < sizeof(t_buf); i++)
    {
        t_buf[i] = i;
    }
    msg1.send_buf   = &t_buf;
    msg1.recv_buf   = &r_buf;
    msg1.length     = sizeof(t_buf);
    msg1.cs_take    = 1;
    msg1.cs_release = 1;
    msg1.next       = RT_NULL;
    rt_spi_transfer_message(spi_dev, &msg1);
    rt_kprintf("spi rbuf : ");
    for (i = 0; i < sizeof(r_buf); i++)
    {
        rt_kprintf("%x ", r_buf[i]);
    }
    rt_kprintf("\nspi loopback mode test over!\n");
    return RT_EOK;
}
MSH_CMD_EXPORT(spi_sample, spi loopback test);

编译后生成可执行文件,下载到Vision Board开发板:
RA26.png

四、运行测试

打开串口连上Vision Board开发板,还是熟悉的logo:
RA27.png
list device可以看到SPI1总线和SPI10设备都在。

接下来根据电路图,用镊子将SPI的MISO和MOSI针脚连起来。
RA28.png

输入测试命令spi_sample,即可得到测试结果:
RA29.png

五、结论

本文通过创建RT-Studio工程,实现了Vision Board上的SPI设备驱动配置和简单的SPI主控的外部loopback功能测试,依托于RT-Studio和FSP强大的功能,用户可以很方便的完成功能实现。

更多回帖

发帖
×
20
完善资料,
赚取积分