Ifx Qspi长数据/长连续模式使用问题

问题记录,提问使用,欢迎大家讨论分享问题

疑问项:如何使用ILLD库的QSPI驱动

长/长连续模式下必须使用DMA传输,这里使用“SPI_DMA_1_KIT_TC275_LK”例程进行修改

一、目前使用方法

期望结果:一次传输32byte数据
主/从传输宽度需要设置为32bit,工作模式设置为长数据模式
在这里插入图片描述buffer宽度设置为32(默认为8)
在这里插入图片描述
Master与Slave 的exchange函数的形参count需要设置为实际的byte个数,所以这里需要乘以4
在这里插入图片描述
测试log:
只能传输16byte,排除代码后发现IfxQspi_SpiMaster_writeLong函数中在计算BACON值时,将DL值限制为16
在这里插入图片描述
在这里插入图片描述
修改此处为32,可以正常传输32byte,测试log如下:
在这里插入图片描述在这里插入图片描述

二、问题汇总

1、针对长/长连续模式,大家如何使用的?

2、为什么长/长连续模式下,DL要限制到16?是因为使用的MIXENTR方式传输,这里的限制?
答:实际可以可以限制到32(BACON.DL最大可配置为0x1F,对应32byte),这里限制为16byte,可能是为了和手册的框图对应上。
在这里插入图片描述
3、长连续模式下具体如何如何传输的
代码中,只有在通过IfxQspi_SpiMaster_exchange调用IfxQspi_SpiMaster_writeLong才会写一下BACON的值,其他地方未看见有写,那么后面几次如何写入的?是导致无法传输大于32byte数据的原因?

答:针对长/长连续模式下,是使用DMA进行传输的,需要按照手册(1个BACON+4个DATA,实测1个BACON+8个DATA也可以)这里的配置是通过代码的里面的buffer(DMA的源地址)先配置好,然后由CPU写入第一次配置,后续的配置与数据,通过DMA搬运完成所有数据的传输。
在这里插入图片描述

三、注意事项

1、QSPI最高通信速率手册给的50Mbps,使用普通的Pin脚只能达到20Mbps左右(引脚电气特性决定),若想要超过20Mbps需要使用支持LVDS Pad的Pin,TC27x中只有QSPI2支持,TC37x中QSPI2和QSPI4支持。40Mbps测试log如下:
在这里插入图片描述

2、初始化channel时,配置的波特率对硬件来说只是一个建议值,实际可能不是该波特率,具体波特率见g_qspiDma.spiMasterChannel.base.baudrate(g_qspiDma是变量名,见圈2,以具体工程为准)。
在这里插入图片描述

### QSPI 3-byte 和 4-byte 地址模式配置及使用 QSPI(Quad SPI)是一种高速串行接口,广泛用于嵌入式系统中的闪存通信。当设备容量超过16MB时,通常需要启用4字节地址模式来支持更大的存储空间。 #### 启用4字节地址模式的原因 传统的QSPI操作基于3字节地址度,能够寻址的最大范围为\(2^{24}\)字节(即16MB)。然而,随着存储器密度增加,许多现代闪存器件已超出这一限制。因此,在这些情况下,必须通过发送特定命令切换到4字节地址模式以扩展寻址能力[^1]。 #### 配置过程概述 为了使能4字节地址模式,需向目标Flash芯片发出`SPINOR_OP_EN4B`指令。此命令告知Flash此后应接受并解析四字节形式的地址信息而非三字节版本。值得注意的是,一旦激活了这种状态,则后续所有的访问请求都应当采用相应的较格式直到再次重设回默认设置为止。 以下是具体实现的一个例子: ```c #include <spi_flash.h> void enable_4b_address_mode(struct spi_flash *flash){ uint8_t cmd = SPINOR_OP_EN4B; // Enable 4 Byte Address Mode Command /* Send the command to enter 4 byte address mode */ flash->write_enable(flash); // Ensure write is enabled before changing modes. struct spi_slave *slave = flash->spi; spi_claim_bus(slave); spi_xfer(slave, &cmd, NULL, 1); // Transfer only the opcode without any data payload since EN4B does not require parameters following it. spi_release_bus(slave); printf("Enabled 4-Byte Addressing on Flash.\n"); } ``` 上述代码片段展示了如何利用标准库函数调用来执行必要的硬件交互从而完成转换动作。这里假定了存在一个已经初始化完毕并且可以正常工作的`struct spi_flash*`实例作为输入参数传递给该辅助功能定义。 另外需要注意的一点是在某些特殊场景下可能还需要额外考虑兼容性问题或者厂商自定义行为等因素的影响[^3]。 最后提醒一下开发者们务必查阅所使用的具体型号的数据手册确认其确切的支持情况以及任何潜在差异之处[^4]。 ### 结论 综上所述,针对大于等于16Mbit大小规格的产品而言,适时引入四字位数定位机制显得尤为重要;它不仅有助于充分利用大容量资源而且还简化了许多高级特性如XIP(Execute In Place)等功能的设计难度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值