减少DA14695上的SPI CS计时?

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
5个职位/ 0个新
最后发表
eric_fan
离线
最后看到:4个月,3个星期前
加入:2020-07-14 07:40
减少DA14695上的SPI CS计时?

你好,

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

我尝试使用SPI模块,用LA记录SPI波形,发现CS引脚花费的时间太长。

我的SPI速度是4MHz, CLK计时大约0.25us / bit,但是CS从低到高花了将近90us…

时间图:

CS销低 ---------- 我们等待40 ---------- 9-bit数据(总3 ) ---------- 我们等待40 ---------- CS销高

有没有办法缩短CS引脚时间来加速SPI?

谢谢! !

我的SPI编写代码如下:

void spi_send_DATA(uint8_t dat) {#if 1 //SPI 9位模式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}

关键词:
设备:
LC_Dialog
离线
最后看到:3周4天前
工作人员
加入:2016-09-19 23:20
嗨eric_fan,

嗨eric_fan,

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

你能确认一下你一直在用哪个项目吗?

最好的问候,
LC_Dialog

eric_fan
离线
最后看到:4个月,3个星期前
加入:2020-07-14 07:40
你好LC_Dialog,

你好LC_Dialog,

谢谢支持!

我在WiRa_10.440.8.6 SDK中使用“ble_range_dte”样例项目,关于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) * / #定义CUSTOM_DEVICE_CS_GPIO_PORT (HW_GPIO_PORT_0) #define CUSTOM_DEVICE_CS_GPIO_PIN (HW_GPIO_PIN_20)

kuo41006
离线
最后看到:3周2天前
加入:2019-05-20 09:17
你好,对话框,

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

使用pxp_reporter包含spi函数。

我使用SPI和一个字节的时钟和数据只是50ns,但cs需要5us,如何减少SPI cs计时?

使用hw_spi_write_buf和ad_spi_write输出1字节,cs计时需要20us和5us。

设置:

/ * 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 .on = {HW_GPIO_MODE_OUTPUT_PUSH_PULL, HW_GPIO_FUNC_SPI_CLK, false}, .off = {HW_GPIO_MODE_INPUT, HW_GPIO_FUNC_GPIO, true},}, /* * spi_master_cs array引口个数。/ .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;void 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 DC activate //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数据到lcd(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引脚拉起数据引脚不是。

谢谢! !

附件:
PM_Dialog
离线
最后看到:2天前32分钟
工作人员
加入:2018-02-08 11:03
嗨kuo41006,

嗨kuo41006,

抱歉,我可能错过了你的评论。让我检查一下,然后给你答复。

与此同时,你有没有检查DA1469x教程SPI适配器概念教程?

如果你能提出一个新的论坛门票与你的问题将是非常有帮助的。

谢谢,PM_Dialog