DA14695上的SPI 9位传输?

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
4个职位/ 0个新职位
最后发表
eric_fan
离线
最后看到:7个月1个星期前
加入:2020-07-14 07:40
DA14695上的SPI 9位传输?

你好,

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

现在我尝试实现SPI功能,SPI1 8位模式正常工作,但现在我需要设置SPI1为9位传输模式。

在9位模式,SPI时钟似乎OK(9时钟在一个数据),但MOSI的最高位总是0。(例:0 x0aa 0 x0bf…)

由于SPI缓冲区是"uint8_t",所以我不知道如何设置第9位为1…

我如何发送9位数据像0x1AA, 0x1BF?

谢谢!

设备:
TR_Dialog
离线
最后看到:2个月2周以前
工作人员
加入:2014-06-30 23:52
嗨Eric_fan:

嗨Eric_fan:

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

此外,正如在数据表(第33节:SPI+接口)中指出的:串行接口可以在MASTER模式中传输9位。

谢谢,

TR_DIALOG

eric_fan
离线
最后看到:7个月1个星期前
加入: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, //这里你可以定义你自己的SPI相位。/*应该在初始化阶段禁用*/ .ignore_cs = false, .use_dma = false, //true, .rx_dma_channel = HW_DMA_CHANNEL_0, .tx_dma_channel = HW_DMA_CHANNEL_1}};
//测试以9位模式传输数据。#如果1 ad_spi_activate_cs (spiCustomHandle);//printf("ad spi active CS, ");spiBuf [0] = 0 xaa;spiBuf [1] = 0 xbb;ad_spi_write_9th_bit (spiCustomHandle 0 x01);state = ad_spi_write(spiCustomHandle, &spiBuf[0], 1);if(state != AD_SPI_ERROR_NONE) printf("ad spi write…Ret %d, ", state);ad_spi_write_9th_bit (spiCustomHandle 0 x00); 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
/ /我的SPI适配器9日  /**************************************************************** * [ E。F]此功能仅在SPI 9位主控模式下使用。*/ void ad_spi_write_9th_bit(ad_spi_handle_t句柄,uint8_t val) {ad_spi_data_t *spi = (ad_spi_data_t *)句柄;const HW_SPI_ID id = spi->conf->id;/*任务必须属于控制器*/ OS_ASSERT(id);If (!hw_spi_is_slave(id)) {hw_spi_set_9th_bit(id, val);}}

PM_Dialog
离线
最后看到:19小时12分钟前
工作人员
加入:2018-02-08 11:03
嗨eric_fan,

嗨eric_fan,

很高兴现在工作良好,感谢所附的代码片段。请也查看我们的DA1469x教程SPI适配器概念教程。

谢谢,PM_Dialog