另外:
bootc.net SPI驱动程序是否都支持它们?
是否有其他附件?在尝试通过SPI与其他芯片通信时,我应该谨慎些什么?
#1 楼
Raspberry Pi SPI以APB时钟速度运行,该速度等于250 MHz的核心时钟速度。可以将其除以2到65536之间的任意偶数以获得所需的速度。数据表指定除数必须为2的幂,但这是不正确的。奇数取整,0(或1)等于65536。因此,除数不能小于2。这使频率范围从3.814 kHz到125 MHz,步进32768两者之间。
(此事上有很多误传,但这些结果已通过实验得到验证。请大声疾呼。)
#2 楼
SPI可以以核心时钟速度运行,也可以分频以降低外设速度。核心时钟为250 MHz。分频器可以设置为2的任意幂-从2 ^ 0一直到2 ^ 16。这意味着支持3.8 kHz至250 MHz的SPI频率。来源:
BCM2708 Linux驱动程序(第208行):
.rate = 250000000, /* 250MHz */
https ://github.com/bootc/linux/blob/073993b3f3e23fb8d376f9e159eee410968e0c57/arch/arm/mach-bcm2708/bcm2708.c
Chris Boot的(驱动程序开发人员)博客条目,Raspberry Pi上的SPI(再次)
评论
也许-Farhad是从BCM2835的数据表中采购的,这是RPi的实际SoC,而我的参考是BCM2708的,它只是SoC的一部分。这些源可能会汇聚在一起……但是,它们可能不会再次聚合。因此,我认为现在最好保留备用资源。
–玛丽亚·兹维丽娜(Maria Zverina)
2012年6月28日9:39
哦,area51列出我们每个问题有1.7个答案,并指出“每个问题2.5个答案是好的,每个问题只有1个答案需要一些工作。在健康的网站上,问题会收到多个答案,而最佳答案将被评选为最高答案。” :-)
–玛丽亚·兹维丽娜(Maria Zverina)
2012年6月28日上午9:41
错误答案:不支持2 ^ 0,并且分频器不必为2的幂。
–可以裸体
2012年11月1日12:48
@Nakedible您可以提供陈述的来源吗?
–玛丽亚·兹维丽娜(Maria Zverina)
2012年11月1日在16:27
bcm2835数据表确认了2 ^ 0点。 raspberrypi.org/wp-content/uploads/2012/02/…bcm2835库中的定义也证实了这一点。 open.com.au/mikem/bcm2835至于两个除数的非幂,数据表勘误表中提到可能是2的倍数。 elinux.org/BCM2835_datasheet_errata这也发布在某个论坛上,任何2的倍数似乎都可以使用。通过在实际硬件上测试SPI输出也可以确认所有这些。请参阅下面的我的答案,其中确切说明了这一点。
–可以裸体
2012年11月1日18:01
#3 楼
BCM2835的数据表在第120页上说如下:SPI块的时钟寄存器的值包含。设置为0,除数为65536。除数必须为2的幂。
四舍五入。 SPI的最大时钟速率是APB时钟。
我找不到关于APB总线最大频率是多少的任何参考,我认为这是ARM11文档的一部分不是这个SoC。
评论
感谢您的参考;我相信页面是156吗? CDIV似乎是16b宽,所以从1到65536。“核心时钟”大概是700MHz?那么我们得到的范围是从〜10.7kHz到神秘的APB限制?
–akavel
2012年6月25日在21:48
非常欢迎您,但恐怕此时钟不是核心时钟。它是APB总线:“ APB专为低带宽控制访问而设计,例如系统外围设备上的寄存器接口。该总线的地址和数据阶段与AHB相似,但是信号量却大大减少了,低复杂度(例如,没有突发) )。它必须支持32bit和66MHz信号。”
– FarhadA
2012年6月25日在21:54
#4 楼
我已经测试了http://www.brianhensley.net/2012/07/getting-spi-working-on-raspberry-pi.html上的,并更改了速度。测试通过时的最大速度为15MHz = 15000KHz:
查看结果:
spi mode: 0
bits per word: 8
max speed: 15000000 Hz (15000 KHz)
FF FF FF FF FF FF
40 00 00 00 00 95
FF FF FF FF FF FF
FF FF FF FF FF FF
FF FF FF FF FF FF
DE AD BE EF BA AD
F0 0D
16MHz的测试失败。
安德烈
评论
我的在32MHz = 32,000KHz时运行正常。我在这里看到它提到这也是实际的限制。如果有区别,我正在Raspbian硬浮动上运行最新的RPi固件。
– dodgy_coder
13年8月27日在6:01
让RPi 3以60MHz成功运行该测试。
– Vlad
19年8月22日在14:57
#5 楼
BC时钟分频器SCLK =核心时钟/ CDIV如果CDIV设置为0,除数为65536。除数必须为2的幂。 .....
从语言上讲,“奇数取整”与“幂”是“倍数”的错字相一致。无需引用奇数。
评论
我认为这个答案应该是最重要的。
–琼·瓦特(Jon Watte)
13年1月9日在18:40
你确定吗? Gordon断言,尽管可以给它提供任何偶数,但实际上只有2的幂才有所不同:了解Raspberry Pi上的SPI |戈登斯项目
–scruss
13年2月2日于16:45
我用示波器对此进行了测试。我认为Gordon的问题在于他使用的是内核驱动程序,它会改变时钟速度,而不是不使用内核驱动程序就直接命令处理器。
–可以裸体
13年2月4日在14:39
该论坛主题提供了更多信息来证明Nakedible的答案:raspberrypi.org/phpBB3/…
– Nippey
2013年9月16日13:55