spi
1 功能概述
bk7236具有2路SPI控制器,对应三组SPI引脚。介绍SPI接口的cli命令使用。
2 代码路径
demo路径:
components\bk_cli\cli_spi.c
3 cli命令简介
demo运行依赖的宏配置:
NAME
Description
File
value
CONFIG_SPI_DMA
SPI support DMA
middleware\soc\bk7236\bk7236.defconfig
y
CONFIG_SPI_SLAVE
support SPI slave mode
middleware\soc\bk7236\bk7236.defconfig
y
CONFIG_SPI_MASTER
support SPI master mode
middleware\soc\bk7236\bk7236.defconfig
y
CONFIG_SPI_STATIS
support SPI statis func
middleware\soc\bk7236\bk7236.defconfig
y
CONFIG_SPI_SUPPORT_TX_FIFO_WR_READY
support tx write ready
middleware\soc\bk7236\bk7236.defconfig
y
demo支持的命令如下表:
Command
Param
Description
spi_driver {init|deinit}
{init|deinit}:
init/deinit the spi resoure common
spi {id} init [role] [bit_width]
[polarity] [phase] [wire_mode]
[baud_rate] [bit_order] [dma_mode]
{id}:spi id,value range 0 ~ 1
init spi and set working parameters
{role}:master or slave
{bit_width}: support 8 or 16 bits
{polarity}: CPOL support 0 or 1
{phase}:CPHA support 0 or 1
{wire_mode}: support 3 or 4 wire mode
{baud_rate}:spi baud rate
{bit_order}: support LSB or MSB
{dma_mode}: support DMA
spi_config
{id}
baud_rate {value}
{value}:support baud rate
set spi working parameters
mode {value}
{value}:spi spi mode 0~3
bit_width {value}
{value}: support 8 or 16 bits
wire_mode {value}
{value}:support 3 or 4 wire mode
bit_order {value}
{value}:support LSB or MSB
spi {id} {read|write}
{length}
{id}:spi id,value range 0 ~ 1
read specified length of data through spi
{read|write}: read|write operation
{length}: length to be read|write
SPI 支持的波特率如下:
static const uint32_t s_spi_clk_list[] = { 26000000, /**< DIV1 */ 13000000, /**< DIV2 */ 6500000, /**< DIV4 */ 5200000, /**< DIV5 */ 3250000, /**< DIV8 */ 2600000, /**< DIV10 */ 2000000, /**< DIV13 */ 1625000, /**< DIV16 */ 1300000, /**< DIV20 */ 1040000, /**< DIV25 */ 1000000, /**< DIV26 */ };
SPI模式和极性、相位的对应关系
Command
CPOL
CPHA
0[00]
0
0
0[01]
0
1
0[10]
1
0
0[11]
1
1
4 演示介绍
1、bk7236开发板在con4中将SPI引出,使用2块bk7236开发板,按照下图进行连接
对应的GPIO:
GPIO
FUNC
P44
SCK
P45
CSN
P46
MOSI
P47
MISO
2、启动开发板,对2块开发板分别输入初始化命令,分别设置为master和slave
master: spi 0 init master 8 1 1 4 10000000 MSB 1 //主机输入命令
[15:47:52.552]发→◇spi_driver init [15:47:52.567]收←◆spi_driver init cli:I(87880284):spi driver init $ [15:47:52.661]收←◆ $ [15:50:51.443]发→◇spi 0 init master 8 1 1 4 10000000 MSB 1 □ [15:50:51.443]收←◆spi 0 init master 8 1 1 4 10000000 MSB 1 hal:I(88059168):spi select src_clk xtal cli:I(88059168):spi init, spi_id=0
slave: spi 0 init master 8 1 1 4 10000000 MSB 1 //从机输入命令
[15:47:48.942]发→◇spi_driver init [15:47:48.957]收←◆spi_driver init cli:I(1085932):spi driver init $ [15:47:49.051]收←◆ $ [15:52:33.910]发→◇spi 0 init slave 8 1 1 4 10000000 MSB 1 □ [15:52:33.910]收←◆spi 0 init slave 8 1 1 4 10000000 MSB 1 hal:I(1370886):spi select src_clk xtal cli:I(1370888):spi init, spi_id=0
3、 从机进入接收状态,主机发送数据
slave:spi 0 read 1024
master:spi 0 write 1024
[15:54:01.239]发→◇spi 0 write 1024 □ [15:54:01.255]收←◆spi 0 write 1024 cli:I(88248974):spi write bytes, spi_id=0, data_len=1024 $cli:I(88248984):spi Tx finish! UART send OK!
4、从机接收到数据
I(1458228):spi read, spi_id=0, size:1024 cli:I(1458228):recv_buffer[0]=0x0 cli:I(1458230):recv_buffer[1]=0x1 cli:I(1458230):recv_buffer[2]=0x2 cli:I(1458230):recv_buffer[3]=0x3 ...... cli:I(1458230):recv_buffer[3]=0xff