SPI 9在DA14695上传输?

了解更多常见问题解答教程

4个帖子/ 0新
最后一篇
eric_fan.
离线
最后一次露面:2周4天前
加入:2020-07-14 07:40
SPI 9在DA14695上传输?

你好,

我是新的对话框,我使用DA14695和USB DK来研究样品代码(SDK版本:10.0.8.105,WIRA 10.440.8.6)。

现在我试图实现SPI函数,SPI1 8位模式正常工作,但现在我需要设置SPI1到9位传输模式。

在9位模式下,SPI CLK似乎可以(一个数据中的9个时钟),但MOSI的最高位始终为0.(例如:0x0AA,0x0BF ......)

由于SPI缓冲区是“UINT8_T”,所以我不知道如何将第9位设置为1 ...

如何发送9位数据,如0x1aa,0x1bf?

谢谢!

设备:
tr_dialog.
离线
最后一次露面:1周5天前
职员
加入:2014-06-30 23:52
嗨eric_fan:

嗨eric_fan:

您能否提供在9位模式下配置的代码片段?

此外,如DataSheet(第33部分:SPI +接口)所示:串行接口可以在主模式下传输9位。

谢谢,

tr_dialog.

eric_fan.
离线
最后一次露面:2周4天前
加入:2020-07-14 07:40
你好tr_dialog,

你好tr_dialog,

谢谢你的支持!

在我研究第33节之后,现在9位功能似乎正常工作。

我的简单测试代码如下所示:

// SPI 1初始化/ *外部传感器/模块SPI驱动程序* / const ad_spi_driver_conf_t drv_spi1 = {.spi = {.cs_pad = {custom_device_cs_gpio_port,custom_device_cs_gpio_pin},.word_mode = hw_spi_word_9bit,//您可以在这里定义所需的.smn_role = hw_spi_mode_master,.polarity_mode = hw_spi_pol_low,//您可以在这里定义所需的SPI极性.phase_mode = hw_spi_pha_mode_0,//您可以在这里定义所需的SPI阶段.mint_mode = hw_spi_mint_disable,.xtal_freq = hw_spi_freq_div_4,//您可以在这里声明您自己的SPI速度.fifo_mode = hw_spi_fifo_rx_tx,.disabled = 0,/ *应在初始化阶段* / .ignore_cs = false期间禁用,.use_dma = false,// true,.rx_dma_channel = hw_dma_channel_0,.tx_dma_channel = hw_dma_channel_1};
//测试用9位模式传输数据。#if 1 ad_spi_activate_cs(spicustom handle);// printf(“广告SPI Active CS”);spibuf [0] = 0xaa;spibuf [1] = 0xbb;ad_spi_write_9th_bit(spicustomhandle,0x01);state = ad_spi_write(spicustomhandle,&spibuf [0],1);if(状态!= ad_spi_error_none)printf(“广告spi write ... $%d,”,状态);ad_spi_write_9th_bit(spicustomhandle,0x00);State = AD_SPI_WRITE(SPICustomHandle,&Spibuf [1],1); if(state != AD_SPI_ERROR_NONE) printf("ad spi write... ret %d, ", state); ad_spi_deactivate_cs_when_spi_done(spiCustomHandle); //printf("ad spi deactive CS\r\n"); #endif
//我的第9位的SPI适配器/ ****************************************************************** * [E.F] This function only use in SPI 9-bit master mode. */ void ad_spi_write_9th_bit(ad_spi_handle_t handle, uint8_t val) { ad_spi_data_t *spi = (ad_spi_data_t *) handle; const HW_SPI_ID id = spi->conf->id; /* The task must own the controller */ OS_ASSERT(id); if (!hw_spi_is_slave(id)) { hw_spi_set_9th_bit(id, val); } }

PM_DIALOG.
离线
最后一次露面:23分钟43秒前
职员
加入:2018-02-08 11:03
嗨eric_fan,

嗨eric_fan,

很高兴现在正常工作,谢谢附加的代码片段。还请查看我们的DA1469X教程SPI适配器概念教程。

谢谢,PM_DIALOG.