这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» MCU» AurixTC36x在配置SPI模块时,QSPI的时钟源怎么选择?

共2条 1/1 1 跳转至

AurixTC36x在配置SPI模块时,QSPI的时钟源怎么选择?

工程师
2024-02-28 19:17:54 打赏

问题1:在配置SPI模块时,QSPI的时钟源怎么选择,EB配置中,McuClockSettingConfig_0的General中有McuQspiClockSourceSelection 选项,但是McuClockReferencePoint中也有一个MCU_QSPI_FREQUENCY的可选项,这两个的区别是什么

问题2: TIDLEA,B 的怎么去测试,不太明白这个时间指的是什么,是不是我得发连续帧才能测出来




关键词: Aurix TC36x SPI

助工
2024-02-28 19:19:51 打赏
2楼

问题1:在配置SPI模块时,可以选择QSPI的时钟源。在EB配置中,McuClockSettingConfig_0的General部分有一个选项叫做McuQspiClockSourceSelection,它用于选择QSPI的时钟源。而McuClockReferencePoint中的MCU_QSPI_FREQUENCY选项则是用于定义QSPI的时钟频率,这两个选项的作用有所不同。

问题2:TIDLEA和TIDLEB是指SPI通信中的空闲时间。TIDLEA指的是主设备发送完一个字节数据后,到下一次发送一个新字节数据之间的时间。TIDLEB则是从从设备接收到一个字节数据后,到下一次接收一个新字节数据之间的时间。

测试TIDLEA和TIDLEB时,你需要发送一系列连续帧,然后通过测量接收到的数据的间隔时间来确定TIDLEA和TIDLEB的值。你可以通过改变发送数据的频率或者发送不同长度的数据来观察TIDLEA和TIDLEB的变化。

可以参考iLLD里面如下代码:
IfxScuCcu_getQspiFrequency
这个函数里面有频率的选择
IfxQspi_SpiMaster_setChannelBaudrate
及IfxQspi_calcRealBaudrate
这个函数里面有计算方法(关于fQspi和ECON[cs].B.Q, A, B, C)


float calculateRealBaudrate(Ifx_QSPI *qspi, IfxQspi_ChannelId channelId){

// Extracting relevant parameters int cs = channelId % 8;

float fQspi = IfxScuCcu_getQspiFrequency();

// Set fQspi to the base QSPI frequency (e.g., 200MHz)

// Configuring QSPI parameters:

// TQ is 0,

// Q is 24,

// A is 3,

// B is 3,

// and C is 1.

// Adjusting fQspi for TQ fQspi = fQspi / (qspi->GLOBALCON.B.TQ + 1);

// Adjusting fQspi for Q

// Example: fQspi = 200M fQspi = fQspi / (econ[cs].B.Q + 1);

// Example: fQspi = 8M

// Further adjustments for A, B, and C fQspi = fQspi / ((econ[cs].B.A + 1) + econ[cs].B.B + econ[cs].B.C);

// Example: fQspi = 1M return fQspi;}


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]