电子说
1.前言说明
1.1 本章内容
第一次接触RTT是在2022年的参加的系统集成与芯片设计大赛,当时报名了RTT赛道从此就打开了我使用RTT的大门,RTT是一个非常好的实时操作系统,拥有很多的组件包以及功能,好了回归正题,今天使用开发板进行一个W5500 TCP通讯的测评。
1.2 模块介绍
我们通过查阅数据手册发现RA6M3 HMI Board开发板是具有两个硬件SPI的,这里我们使用SPI1与W5500进行通讯,通过重映射方式设置以下IO口作为SPI引脚配置连接方式如下所示
P202——>MISO
P203——>MOSI
P204——>RSPCK
P009——>CS
1.3 开发环境
开发软件:RT-Thread Studio 2.2.6版本+FSP3.5
下载与调试:板载DAP-Link
2.开发过程
2.1 新建文件
选择文件-新建-RT-Thread项目,选择基于开发板 选中HMI Board即可,调试器我选择DAP-Link,当然也可以选择其他的调试器因为板载带了调试起来就毕竟方便,右侧RTT官方还贴心的给出了原理图以及数据手册供大家参考,因为我这有这个名字了所以就报错提醒了一下
2.2 Studio配置SPI以及编译
先打开RT-Thread Setting设置,然后选择硬件,使能SPI总线以及使能SPI1
接着写一段SPI初始化代码以及将设备挂载到总线上,随后我们编译一下代码查看一下设备是否挂载上
#define SPI_Name "spi1"
struct rt_spi_device spi_device;
void W5500_SPI_Init(void)
{
#define W5500_CS1 BSP_IO_PORT_00_PIN_10 / W5500 CS pins */
static rt_device_t spi;
rt_err_t spi_mont;
struct rt_spi_configuration cfg;
spi = rt_device_find(SPI_Name);
uint8_t test[5] = "Test";
if(!spi)
{
rt_kprintf("spi no findrn");
}
else {
rt_kprintf("spi get readyrn");
}
spi_device = (struct rt_spi_device *)rt_malloc(sizeof(struct rt_spi_device));
spi_mont = rt_spi_bus_attach_device_cspin(spi_device,"spi10","spi1",RT_NULL,RT_NULL);
if(spi_mont != RT_EOK)
{
LOG_E("mount spi errorrn");
}
else {
LOG_E("spi successrn");
cfg.data_width = 8;
cfg.mode = RT_SPI_MASTER | RT_SPI_MODE_0 | RT_SPI_MSB; //LL模式
cfg.max_hz = 10 *1000 *1000; //10M
rt_spi_configure(spi_device, &cfg);
// rt_spi_send(spi_device, test, 4);
}
}
INIT_APP_EXPORT(W5500_SPI_Init); //自动初始化
通过杜邦线与W5500连接进行测试
可以看到我们已经成功把设备挂载上了
2.3 测试通讯
编写完W5500驱动后使用ping 命令测试以下是否移植成功,官方有W5500软件包,不过我直接自己移植了一个,可以看到可以成功ping通并且TCP通讯也是正常的。
3 心得体会
一开始移植上去后发现无法正常ping通数据,发现使用rt_spi_send函数时候发送一次数据就拉回去片选了,在发送32位地址时候片选没有连续发送8位地址数据的时候是正常,就导致无法ping通设备,可以更换rt_spi_send_then_send发送函数,或者用pin框架写一个片选,都是可以的,虽然是第一次接触瑞萨的板子不过RTT做了很好的适配,在很大程度上简化了开发难度,这次只测试了一下SPI与W5500的通讯,后续有时间的话可以出一个骑行码表,好了本次测评就到这了感谢大家的观看。
全部0条评论
快来发表一下你的评论吧 !