19.3. 应用示例¶
19.3.1. spi 作为主机 master 模式¶
19.3.1.1. spi master 初始化¶
通过调用 \ref gx_spi_master_init 接口初始化 spi 控制器和 spi 设备;spi 总线数据结构 \ref sflash_master,参数如下:
bus_num 为 spi 总线编号句柄,只有一个通用 spi,默认为 0;
spi 为 spi 设备;
list_head 为 spi 设备链表的头指针;
spi 设备数据结构 \ref spi_device,参数如下:
master 为 spi 设备所属的主机 spi 总线指针,填 NULL;
max_speed_hz 为 spi 设备最大时钟频率;
chip_select 为 cs 片选信号,只有一个 cs 信号,因此为 0;
bits_per_word 为 spi 传输位宽,可配置 8 或 32;
data_format 为 spi 传输模式,单线模式为 0;
mode 为 0,无作用;
示例代码如下:
static struct sflash_master g_spi_master={
.bus_num = 0,
.spi={
.master = NULL,
.chip_select = 0,
.max_speed_hz = 1000*1000,
.mode = 0,
.bits_per_word = 8,
.data_format = 0,
},
};
gx_spi_master_init(&g_spi_master);
19.3.1.2. spi master 发送¶
通过 \ref gx_spi_tx 接口发送数据,参数如下:
spi 为 spi 设备;
buf 为要发送的数据 buffer;
len 为要发送数据的长度;
示例如下:
uint8_t spi_test_buf[256];
uint32_t len = 0x100;
if(gx_spi_tx(&spi_master->spi, spi_test_buf, len) != 0)
{
printf("spi master tx failed,len: %d\r\n", len);
return -1;
}
19.3.1.3. spi master 接收¶
通过 \ref gx_spi_rx 接口接收数据,参数如下:
spi 为 spi 设备;
buf 为要接收的数据 buffer;
len 为要接收数据的长度;
示例如下:
uint8_t spi_test_buf[256];
uint32_t len = 0x100;
if(gx_spi_rx(&spi_master->spi, spi_test_buf, len) != 0)
{
printf("spi master rx failed,len: %d\r\n", len);
return -1;
}
19.3.2. spi 作为从机 slave 模式¶
19.3.2.1. spi slave 初始化¶
通过调用 \ref gx_spi_slave_init 接口初始化 spi 总线和 spi 设备,参数 \ref spi_device 如下:
master 为 spi 总线指针,填 NULL,初始化时驱动内部自动赋值;
max_speed_hz 为 spi 设备最大时钟频率;
chip_select 为 0;
bits_per_word 为 spi 传输位宽,可配置 8 或 32;
data_format 为 spi 传输模式,单线模式为 0;
mode 为 0,无作用;
示例代码如下:
static struct spi_device g_spi_slave={
.master = NULL,
.chip_select = 0,
.max_speed_hz = 1000*100,
.mode = 0,
.bits_per_word = 8,
.data_format = 0,
};
if((iRet = gx_spi_slave_init(&g_spi_slave)) != 0)
{
printf("gx_spi_slave_init error:%d\r\n",iRet);
}
19.3.2.2. spi slave 发送¶
通过 \ref gx_spi_slave_tx 接口发送数据,参数如下:
spi 为 spi 设备;
buf 为要发送的数据 buffer;
len 为要发送数据的长度,如果使用异步 dma 传输模式时,len的长度需要大于 16 字节 (8bit 位宽) 或 64 字节 (32bit 位宽);
slave_completetion_cb 异步传输模式时的回调接口,为 NULL;
示例如下:
uint8_t spi_test_buf[256];
uint32_t len = 0x100;
if(gx_spi_slave_tx(&g_spi_slave, spi_test_buf, len, NULL))
{
printf("spi slave write failed,len: %d\r\n", len);
return -1;
}
19.3.2.3. spi slave 接收¶
通过 \ref gx_spi_slave_rx 接口接收数据,参数如下:
spi 为 spi 设备;
buf 为要接收的数据 buffer;
len 为要接收数据的长度;
slave_completetion_cb 异步传输模式时的回调接口,为 NULL;
示例如下:
uint8_t spi_test_buf[256];
uint32_t len = 0x100;
if(gx_spi_slave_rx(&g_spi_slave, spi_test_buf, len, NULL))
{
printf("spi slave read failed,len: %d\r\n", len);
return -1;
}