芯片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敲命令的方式去验证,因此不再抓串口数据,而是直接采用逻辑分析仪抓取波形并分析数据的方式来验证结果。
从逻辑分析仪抓到的数据来看,与预期的数据一致。