跳转到主要内容

减少SPI CS DA14695时机?

DA1469x

1年前

发布的eric_fan0点 4回复
0的问题

你好,

我在新的对话框,我使用DA14695 & USB DK学习示例代码(SDK版本:10.0.8.105 WIRA 10.440.8.6)。

我试图使用SPI模块,记录了SPI与洛杉矶,波形,发现CS销太花时间了。

我SPI速度是4 mhz, CLK时间约0.25我们/位,但花了近90名美国CS从低到嗨……

时间图:

CS销低- - - - - - - - - - -等待40美国- - - - - - - - - - - 9-bit数据(共3人)- - - - - - - - - - -等待40我们- - - - - - - - - - - CS销高

有办法缩短加快SPI CS销时间?

谢谢! ! !

我的SPI编写代码如下所示:

空白spi_send_DATA (uint8_t dat){#如果1 / / SPI 9-bit模式ad_spi_activate_cs (SpiHandle);ad_spi_write_9th_bit (SpiHandle 0 x01);spi_send_8b (dat);/ / ad_spi_deactivate_cs_when_spi_done (SpiHandle);ad_spi_deactivate_cs (SpiHandle);# endif}

1年前

LC_Dialog

嗨eric_fan,

我正在调查这个问题,会尽快给你回电。

请确认你使用哪些特定项目。

最好的问候,
LC_Dialog

1年前

eric_fan 0点

你好LC_Dialog,

谢谢你的支持!

我使用“ble_range_dte”WiRa_10.440.8.6 SDK示例项目,SPI移植的一部分是在“ble_peripheral_task”。

SPI初始设置:

# include“ad_spi。h " / * SPI芯片选择针* /静态常量ad_io_conf_t spi_master_cs [] = {{.port = CUSTOM_DEVICE_CS_GPIO_PORT .pin = CUSTOM_DEVICE_CS_GPIO_PIN碧绿= {.mode = HW_GPIO_MODE_OUTPUT_PUSH_PULL .function = HW_GPIO_FUNC_SPI_EN .high = true}, .off = {.mode = HW_GPIO_MODE_OUTPUT_PUSH_PULL .function = HW_GPIO_FUNC_SPI_EN .high = true}},};/ * SPI1 IO * / const ad_spi_io_conf_t bus_SPI1 = {.spi_do = {.port = SPI1_DO_GPIO_PORT .pin = SPI1_DO_GPIO_PIN碧绿= {HW_GPIO_MODE_OUTPUT_PUSH_PULL HW_GPIO_FUNC_SPI_DO,假},.off =} {HW_GPIO_MODE_INPUT HW_GPIO_FUNC_GPIO,如此,},.spi_di = {.port = SPI1_DI_GPIO_PORT .pin = SPI1_DI_GPIO_PIN碧绿= {HW_GPIO_MODE_INPUT HW_GPIO_FUNC_SPI_DI,假},.off =} {HW_GPIO_MODE_INPUT HW_GPIO_FUNC_GPIO,如此,},.spi_clk = {.port = SPI1_CLK_GPIO_PORT .pin = SPI1_CLK_GPIO_PIN碧绿= {HW_GPIO_MODE_OUTPUT_PUSH_PULL HW_GPIO_FUNC_SPI_CLK,假},.off =} {HW_GPIO_MODE_INPUT HW_GPIO_FUNC_GPIO,如此,},/ * *的别针spi_master_cs数组。* * \警告当SPI总线被SNC \ p cs_cnt必须总是1 * / .cs_cnt = 1, .spi_cs = spi_master_cs .voltage_level = HW_GPIO_POWER_V33 / /这里您可以定义所需的电压水平};/ * SPI1总线配置* / spi_bus_t SPI1 = &bus_SPI1;/ *外部传感器/模块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_HIGH / /这里您可以定义所需的SPI极性.phase_mode = HW_SPI_PHA_MODE_0 / /这里您可以定义所需的SPI阶段.mint_mode = HW_SPI_MINT_DISABLE .xtal_freq = HW_SPI_FREQ_DIV_8 / /这里你可以声明自己的SPI速度.fifo_mode = HW_SPI_FIFO_RX_TX .disabled = 0,在初始化阶段应该禁用/ * * / .ignore_cs = false, .use_dma = true, .rx_dma_channel = HW_DMA_CHANNEL_0 .tx_dma_channel = HW_DMA_CHANNEL_1}};/ *传感器/模块设备配置* / const ad_spi_controller_conf_t dev_SPI_CUSTOM_DEVICE = {.id = HW_SPI1 .io = &bus_SPI1 .drv = &drv_SPI1};spi_device SPI_CUSTOM_DEVICE = &dev_SPI_CUSTOM_DEVICE;
#定义SPI1_DO_GPIO_PORT (HW_GPIO_PORT_0) # define SPI1_DO_GPIO_PIN (HW_GPIO_PIN_26) # define SPI1_DI_GPIO_PORT (HW_GPIO_PORT_0) # define SPI1_DI_GPIO_PIN (HW_GPIO_PIN_24) # define SPI1_CLK_GPIO_PORT (HW_GPIO_PORT_0) # define SPI1_CLK_GPIO_PIN (HW_GPIO_PIN_21) / * SPI芯片选择销(s) * / # define CUSTOM_DEVICE_CS_GPIO_PORT (HW_GPIO_PORT_0) # define CUSTOM_DEVICE_CS_GPIO_PIN (HW_GPIO_PIN_20)

7个月前

kuo41006 0点

你好,对话框,
我也有同样的问题在我的例子中。
我的设备使用DA1469x套装+ DA14699子板。

使用pxp_reporter包括spi的函数。

我使用SPI沙子一个字节clk &数据仅仅50 ns,但cs需要5我们,如何减少SPI cs时机?

使用hw_spi_write_buf & ad_spi_write输出1个字节的cs时间是我们需要20我们& 5。

设置:

/ * SPI1 IO * / const ad_spi_io_conf_t bus_SPI1 = {.spi_do = {.port = SPI1_DO_GPIO_PORT / / HW_GPIO_PORT_1 .pin = SPI1_DO_GPIO_PIN / / HW_GPIO_PIN_1碧绿= {HW_GPIO_MODE_OUTPUT_PUSH_PULL HW_GPIO_FUNC_SPI_DO,假},.off =} {HW_GPIO_MODE_INPUT HW_GPIO_FUNC_GPIO,如此,},.spi_clk = {.port = SPI1_CLK_GPIO_PORT / / HW_GPIO_PORT_1 .pin = SPI1_CLK_GPIO_PIN / / HW_GPIO_PIN_2碧绿= {HW_GPIO_MODE_OUTPUT_PUSH_PULL HW_GPIO_FUNC_SPI_CLK,假},.off =} {HW_GPIO_MODE_INPUT HW_GPIO_FUNC_GPIO,如此,},/ * *的别针spi_master_cs数组。* * \警告当SPI总线被SNC \ p cs_cnt必须总是1 * / .cs_cnt = 1, .spi_cs = spi_master_cs / / HW_GPIO_PORT_1 HW_GPIO_PIN_5 .voltage_level = HW_GPIO_POWER_VDD1V8P / /这里您可以定义所需的电压水平};/ *外部传感器/模块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_8BIT / /这里您可以定义所需的.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_2 / /这里你可以声明自己的SPI速度32 mhz = > / 2 = > 16兆赫.fifo_mode = HW_SPI_FIFO_RX_TX .disabled = 0,在初始化阶段应该禁用/ * * / .ignore_cs = false, .use_dma = true, .rx_dma_channel = HW_DMA_CHANNEL_0 .tx_dma_channel = HW_DMA_CHANNEL_1}};/ *传感器/模块设备配置* / const ad_spi_controller_conf_t dev_SPI_CUSTOM_DEVICE = {.id = HW_SPI1 .io = &bus_SPI1 .drv = &drv_SPI1};ad_spi_handle_t SPI_handle_t;空白SPI_CMD_WRITE (const uint8_t * wbuf size_t wlen) {hw_gpio_set_inactive (HW_GPIO_PORT_1 HW_GPIO_PIN_3);ad_spi_activate_cs (SPI_handle_t);/ / CS直流激活/ / ad_spi_write_async (HW_SPI1、wbuf wlen, NULL, NULL);/ / ad_spi_write (SPI_handle_t wbuf wlen);hw_spi_write_buf (HW_SPI1 wbuf wlen, NULL, NULL); ad_spi_deactivate_cs_when_spi_done(SPI_handle_t); hw_gpio_set_active(HW_GPIO_PORT_1, HW_GPIO_PIN_3); // CS DC release } void SPI_TEST_task(void *params) { ad_spi_init(); SPI_handle_t = ad_spi_open((ad_spi_controller_conf_t *)SPI_CUSTOM_DEVICE); //ad_spi_deactivate_cs(SPI_handle_t); hw_gpio_set_inactive(HW_GPIO_PORT_1, HW_GPIO_PIN_4); OS_DELAY_MS(110); hw_gpio_set_active(HW_GPIO_PORT_1, HW_GPIO_PIN_4); printf("\n\reset_end \n\r"); OS_DELAY_MS(200); // ad_spi_activate_cs(SPI_handle_t); a[0]=1; SPI_CMD_WRITE(a,1); /* ad_spi_activate_cs(SPI_handle_t); hw_gpio_set_inactive(HW_GPIO_PORT_1, HW_GPIO_PIN_3); ad_spi_write(SPI_handle_t,a,1); ad_spi_deactivate_cs_when_spi_done(SPI_handle_t); hw_gpio_set_active(HW_GPIO_PORT_1, HW_GPIO_PIN_3); */ while(1) { OS_DELAY_MS(500); printf("\n\r in while loop \n\r"); } }

fifo_mode设置
我只需要spi数据液晶(4行)
但是,当我改变spi设置.fifo_mode = HW_SPI_FIFO_RX_TX = > HW_SPI_FIFO_TX_ONLY,代码总是运行在ASSERT_WARNING ((cfg - > fifo_mode = = HW_SPI_FIFO_RX_TX) | |
(cfg - > fifo_mode = = HW_SPI_FIFO_NONE));

polarity_mode设置

我改变HW_SPI_POL_LOW = > HW_SPI_POL_HIGH
在逻辑分析仪clk销销不是打开数据。

谢谢! ! !

附件 大小
SPI.pdf 464.57 KB

6个月前

PM_Dialog

嗨kuo41006,

道歉——也许我错过了你的评论。让我看看,我会回到你。

同时,你是否检查了DA1469x教程SPI适配器的概念教程?

这将是非常有用的,如果你可以提出一个新论坛门票与你的问题。

谢谢,PM_Dialog