跳到主要内容

降低DA14695上的SPI CS定时?

10个月前

降低DA14695上的SPI CS定时?

张贴了eric_fan0分 4回复
0的问题

你好,

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

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

我的SPI速度是4MHz,CLK时间约为0.25us /位,但CS需要几乎90起,从低到嗨...

时间图:

CS引脚低----------等40us ---------- 9位数据(总3Us)----------等40us ---------- CS PIN高

有没有办法缩短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}

10个月前

lc_dialog.

嗨eric_fan,

我目前正在调查这个问题,很快就会回复你。

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

此致,
lc_dialog.

10个月前

eric_fan 0分

你好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;
的#define 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芯片选择引脚(秒)* /#定义custom_device_cs_gpio_port(hw_gpio_port_0)#define custom_device_cs_gpio_pin(hw_gpio_pin_20)

4个月前

Kuo41006 0分

你好,对话框,
我也有同样的问题。
我的设备使用DA1469X Pro Kit + DA14699子板。

使用pxp_reporter包含spi函数。

我使用spi sand一个字节的clk和数据只有50ns,但cs需要5us,如何减少spi cs时序?

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

设置:

/ * SPI1 IO * /常量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,FALSE},.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,FALSE},.off = {HW_GPIO_MODE_INPUT,HW_GPIO_FUNC_GPIO,TRUE},},/* * spi_master_cs数组中的引脚数。* * \警告SNC \ P CS_CNT使用SPI总线时必须始终为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_pio_port,custom_device_cs_gpio_pin},.word_mode_cs_gpio_pio_wnet_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速度32MHz => /2 => 16MHz .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)));

极性_Mode设置

修改HW_SPI_POL_LOW => HW_SPI_POL_HIGH
在逻辑分析仪中,只需提取CLK引脚数据引脚不是。

谢谢!!!

附件 大小
spi.pdf. 464.57 KB

4个月前

PM_Dialog

嗨kuo41006,

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

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

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

谢谢,PM_Dialog