SPI主时钟设置

了解更多常见问题教程

13个职位/0个新职位
最后一篇文章
贺郎里
离线
最后一次见到:2天17小时前
已加入:2019-12-15 12:42
SPI主时钟设置

亲爱的支持

我有一个da14695 USB评估板,我想集成一个设备板上的SPI。
此从设备需要最大1MHz SCLK频率才能进行通信。
我试图找到一些解决办法来设置一个较低的频率,但我没有找到任何办法。

是否可以设置较低的SPI主SCLK频率?如果可能的话,请帮我怎么做。

提前谢谢

设备:
PM\U对话框
离线
最后一次见到:1天3小时前
工作人员
已加入:2018-02-08 11:03
你好,赫朗利,

你好,赫朗利,

谢谢你的问题。请参阅数据表第33节和表345:SPI\ U CTRL\ U REG。SPI\u CTRL\u REG[SPI\u CLK]位字段负责主模式下的时钟输出频率。因此,在SPI配置结构(ad\u SPI\u driver\u conf\t)中,您应该选择适当的时钟。

我建议你先检查一下DA1469x SPI适配器概念教程. 在该教程中,选择了.xtal\u freq=HW\u SPI\u freq\u DIV\u 8,因此您可以根据需要进行更改。

通常,我们强烈建议使用适配器来访问硬件外设,因为它不仅提供对外设的访问,而且确保当前正在访问它的其他任务在外设再次释放之前暂停其操作。因此,如果另一个任务同时访问同一个外围设备,您不必担心。另外,在睡眠模式下,所有外围模块都关闭。

谢谢,下午好

贺郎里
离线
最后一次见到:2天17小时前
已加入:2019-12-15 12:42
亲爱的支持

亲爱的支持

谢谢你的快速回答。
我在代码中检查并使用了SPI示例。我使用ad-sw层所有其他部分的代码。
我试着以一种原始的方式减少SPI时钟。它意味着改变最大除法器枚举(HW\u SPI\u freq\u DIV\u 14)中的.xtal\u freq值。
当我测量SPI-SCLK信号频率时,我看到大约2.5mhz。(我的USB示波器精度不高,但我确信它超过1MHz)

我有点困惑,因为我检查了时钟树(第168页),我看到这个除法器是降低SCLK频率的一种方法,因为除法器的输入可以来自sysclk或divN时钟源。据我所知,divN是一个固定值,或者没有任何接口函数可以修改这个值。
这意味着对我来说,这是不可能去贝娄与SCLK 1兆赫以下,如果我想使用32兆赫晶体或锁相环。我肯定我错过了什么只是我不知道什么。

提前谢谢

PM\U对话框
离线
最后一次见到:1天3小时前
工作人员
已加入:2018-02-08 11:03
你好,赫朗利,

你好,赫朗利,

请尝试更换分隔符:

cm\ apb\ set\时钟\分频器(apb\ div1);

cm\U ahb\U设置\U时钟\U分配器(ahb\U div1);

然而,您将无法时钟PLL的时钟,所以系统将运行在32兆赫。请检查hw\u clk\u set\u sysclk()函数。

谢谢,下午好

贺郎里
离线
最后一次见到:2天17小时前
已加入:2019-12-15 12:42
亲爱的支持

亲爱的支持

谢谢你的回复。

为了修改ahb和apb总线时钟分频器,我切换回XTAL32MHz时钟,并测量了SCLK频率,但没有得到任何积极的结果。我尝试了几个分频器参数,但它们对SPI时钟频率没有任何影响。

在时钟树和数据表中,我看到这些除法器只影响QSPI外围设备,但它用于flash或ram处理。

我看到大约2.3-2.5MHz在SPI时钟引脚和一种方式,我可以修改这个频率的SPI时钟分频器,你也提到了过去。

你有没有其他的想法,我如何才能实现一个小于1MHz的频率,或者我们可以宣布,这是不可能的这种架构?

提前谢谢

PM\U对话框
离线
最后一次见到:1天3小时前
工作人员
已加入:2018-02-08 11:03
你好,赫朗利,

你好,赫朗利,

请看数据表中的图34:时钟树图。所有外设块要么从系统时钟div1(绿线)要么从divN\u clk(红线)馈送。绿线是系统时钟除以1,2。4或8。默认情况下,系统时钟除以1,频率为32MHz:

cm\系统\时钟\初始化(sysclk\ XTAL32M);

cm\ apb\ set\时钟\分频器(apb\ div1);

cm\U ahb\U设置\U时钟\U分配器(ahb\U div1);

红线是DivN HW块的输出,频率始终为32Mhz,而不考虑前面提到的划分。

CLK\ U COM\ U REG处理“绿色”和“红色”线之间的选择。低电平驱动器(LLD)采用32MHz时钟(红线)divN\u clk实现。时钟频率可以在外围HW块中进一步划分(如果可能的话)。

特别是对于SPI外围模块,SPI控制器的时钟速度高达32mhz,SPI源时钟可以除以2、4、8、14(根据数据表)。所以最小的SPI时钟是32MHz/14。

如果您想进一步降低SPI时钟,您应该为外围时钟选择div1,然后降低系统时钟以获得较低的外围频率。不建议这样做,因为总体CPU性能会更低。此外,如果某个事件将在应用程序中触发系统时钟的更高频率变化,例如需要PLL96的USB插件,这将导致外围设备的速度无条件变化。在应用程序中您必须格外小心,因此在使用divN时,在处理外围设备的过程中绝对不会发生系统时钟变化。

如果仍然需要使用1MHz SPI时钟,可能的解决方法如下:

  1. 在main()函数中将系统时钟除以4,如下所示

cm\系统\时钟\初始化(sysclk\ XTAL32M);

cm\ apb\ set\时钟\分频器(apb\ div4);

cm\U ahb\U设置\U时钟\U分配器(ahb\U div4);

新系统时钟为32MHz/4=8MHz

  1. 相应地更改hw\u spi\u init\u clk\u reg(),并选择Div1 clock-clk\u COM\u reg[spi\u clk\u SEL]=0x01
  2. 将SPI时钟进一步除以8-SPI\ U CTRL\ U REG[SPI\ U CLK]=0x00。结果为8MHz/8=1MHz

谢谢,下午好

贺郎里
离线
最后一次见到:2天17小时前
已加入:2019-12-15 12:42
亲爱的支持

亲爱的支持
谢谢你详细的回答。我检查了这个解决方法。意思是
1设置HCLK和PCLK分配器
cm\系统\时钟\初始化(sysclk\ XTAL32M);
cm\ apb\ set\时钟\分频器(apb\ div4);
cm\U ahb\U设置\U时钟\U分配器(ahb\U div4);
cm_lp_clk_init();
2Modify hw\u spi\u init\u clk\u reg()函数(我使用SPI1)
无效hw\ U spi\ U init\ U clk\ U reg(hw\ U spi\ U ID)
{
断言\u警告(REG\u GETF(CRG\u TOP,PMU\u CTRL\u REG,COM\u SLEEP)==0);
如果(id==HW\u SPI1){
CRG\ U COM->RESET\ U CLK\ U COM\ U REG=CRG\ U COM\ U RESET\ U CLK\ U COM\ U REG\ U SPI\ U CLK\ U SEL\ U Msk;
CRG\ U COM->SET\ CLK\ U COM\ U REG=(CRG\ U COM\ U SET\ CLK\ U COM\ U REG\ U SPI\ U ENABLE\ Msk\ CRG\ U COM\ U SET\ CLK\ U COM\ U REG\ U SPI\ U CLK\ U SEL\ Msk);
}其他{
CRG\ U COM->RESET\ U CLK\ U COM\ U REG=CRG\ U COM\ U RESET\ U CLK\ U COM\ U REG\ U SPI2\ U CLK\ U SEL\ U Msk;
CRG\ U COM->SET\ CLK\ U COM\ U REG=CRG\ U COM\ SET\ CLK\ U COM\ U REG\ U SPI2\ U ENABLE\ Msk;
}
}
三。除SPI时钟(带14->500k SCLK)
/*外部传感器/模块SPI驱动器*/
const ad \u spi \u driver \u conf \u t drv \u SPI1 \u adis={
.spi={
.cs\u pad={DEVICE\u cs\u GPIO\u PORT,DEVICE\u cs\u GPIO\u PIN},
.word\u mode=HW\u SPI\u word\u 8BIT,//在这里可以定义所需的
.smn\u role=HW\u SPI\u MODE\u MASTER,
.polarity\u mode=HW\u SPI\u POL\u LOW,//这里可以定义所需的SPI极性
.phase\u mode=HW\u SPI\u PHA\u mode\u 0,//在这里可以定义所需的SPI阶段
.mint\u mode=HW\u SPI\u mint\u禁用,
.xtal\ u freq=HW\ u SPI\ u freq\ u DIV\ u 14,
.fifo\u mode=HW\u SPI\u fifo\u RX\u TX,
.disabled=0,/*应在初始化阶段禁用*/
.ignore\u cs=false,
.使用\ dma=true,
.rx\u dma\u channel=HW\u dma\u channel\u 2,
.tx\u dma\u channel=HW\u dma\u channel\u 4
}
};

不幸的是,结果是一样的。

我又看了一遍数据表,但不明白你为什么这么写,绿线是系统时钟除以1,2。4或8“。绿线是系统时钟。ahb和apb总线时钟是系统时钟除以1、2、4、8。绿线来自sys\ U clk选择器,直接来自XTAL32、RC32、PLL、LP时钟。我可以修改ahb和apb总线时钟,但正如我看到的SPI外围时钟是独立于ahb或apb总线时钟。(图84:SPI框图)。这些总线只参与数据传输。

提前谢谢

PM\U对话框
离线
最后一次见到:1天3小时前
工作人员
已加入:2018-02-08 11:03
你好,赫朗利,

你好,赫朗利,

我的意思是,如果ahb和apb总线时钟被除,那么系统时钟也被除1,2,4,8。请让我检查一下,我会告诉你的。

我能问一下您使用的SPI接口是什么,要求的SPI时钟速度低于1MHz吗?

谢谢你的对话

贺郎里
离线
最后一次见到:2天17小时前
已加入:2019-12-15 12:42
亲爱的支持

亲爱的支持

感谢您检查您这边的问题。

当然,我想用ADIS16460进行高精度IMU测量,并通过蓝牙发送测量结果。
这是ADIS传感器的数据表https://www.analog.com/en/雷电竞官网登录products/adis16460.html
在数据表中,您可以在第5页顶部看到最大SPI时钟频率。

(我想在这篇文章之后,我们可以向模拟设备索取一些钱,作为广告费用:))

提前谢谢

贺郎里
离线
最后一次见到:2天17小时前
已加入:2019-12-15 12:42
亲爱的支持

亲爱的支持

你有机会在评估板上检查这个问题吗?

先谢谢你

贺郎里
离线
最后一次见到:2天17小时前
已加入:2019-12-15 12:42
亲爱的支持

亲爱的支持

你有机会在评估板上检查这个问题吗?

先谢谢你

PM\U对话框
离线
最后一次见到:1天3小时前
工作人员
已加入:2018-02-08 11:03
你好,赫朗利,

你好,赫朗利,

谢谢你的提醒和我对迟来的回复表示歉意。我再试一次。

谢谢,下午好

PM\U对话框
离线
最后一次见到:1天3小时前
工作人员
已加入:2018-02-08 11:03
你好,赫朗利,

你好,赫朗利,

有没有可能附上您的项目在这里看一看?

谢谢,下午好