芯片SPI资源分配情况
从资源上看,板卡端最终可以使用的SPI接口有两个,一个是接wifi模块的SPIB,另一个是接在PMOD接口上的SPIA。查阅资料,发现野火板卡配套的ESP8266并未实现对应的SPI功能,若需开发,还需要对应的编写esp8266固件,因此优先匹配PMOD接口的SPIA。
配置过程
RTT配置添加
KConfig添加SPI配置:

drv_spi.c中是直接引用RASC生成的文件,因此不需要在drv_config.h中添加SPI相关头文件。
配置代码
在emu中运行menuconfig,打开SPI配置

运行scons --target=mdk5,把dac部分导入工程

配置SPI
打开新生成的keil工程后运行RASC,增加SPI相关配置



由于PMOD接口所使用的cs脚与硬件对应脚不一致,因此只能以gpio的方式实现cs脚,所以还需要配置P301为CS脚

生成代码配置

修改代码
由于spi暂无命令行测试命令,因此需要手动编写测试脚本。
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-10-10 Sherman first version
*/
#include <rtthread.h>
#include "hal_data.h"
#include <rtdevice.h>
void hal_entry(void)
{
rt_err_t res;
static struct rt_spi_device spi_dev;
uint8_t sendbuf[6]={0,1,2,3,4,5};
static rt_uint32_t spi_cs = BSP_IO_PORT_03_PIN_01;
res = rt_spi_bus_attach_device_cspin(&spi_dev,"spi00", "spi0", spi_cs, (void*)spi_cs);
if (res != RT_EOK)
{
rt_kprintf("rt_spi_bus_attach_device!\r\n");
}
struct rt_spi_configuration cfg;
cfg.data_width = 8;
cfg.max_hz = 100000; // 由于暂时手上的逻辑分析仪速率只能到24M,因此只能抓低速的spi通信
cfg.mode = RT_SPI_MODE_1 | RT_SPI_MSB;
spi_dev.bus->owner = &spi_dev;
rt_spi_configure(&spi_dev,&cfg);
while (1)
{
rt_spi_send(&spi_dev, sendbuf, sizeof(sendbuf));
rt_thread_mdelay(1000);
}
}编译固件
结果验证
由于此次验证不再通过msh敲命令的方式去验证,因此不再抓串口数据,而是直接采用逻辑分析仪抓取波形并分析数据的方式来验证结果。

从逻辑分析仪抓到的数据来看,与预期的数据一致。
我要赚赏金
