我是Beaglebone Black和Linux编程的新手,所以我试图弄清楚当我设置SPI连接时会发生什么。我正在运行Linux beaglebone 3.8.13-bone47。
我已经使用设备树覆盖建立了SPI连接,现在我正在运行spidev_test.c来测试连接。对于我正在制作的应用,我需要一个非常具体的频率。因此,当我运行spidev_test并测量比特的频率时,我没有达到预期的频率。
我发送了一个包含0xAA的SPI数据包,并且在spidev_test中我修改了" spi_ioc_transfer.speed_hz "到4000000(4MHz)。但我测量的数据传输频率为2,98MHz。我也看到了与其他速度相同的结果,偏差通常在25-33%左右。
测量速度如何与指定的速度相匹配? 如何在" speed_hz"中分配速度?定义 我应该对频率有多精确?
谢谢:)
答案 0 :(得分:0)
实际上如果仔细观察DSO,您会发现每个时钟周期大约需要312.5 ns,这使得时钟频率 3.2Mhz,。可能是您正在监控的频道
然后,预期&实际速度, 在微控制器中,我使用了所有外围设备,包括SPI从主时钟提供的时钟,该主时钟提供给MCU(在您的情况下为MPU),主频率除以一些预分频给出了周边操作的频率,其中作为外设使用此频率并使用其预分频来控制波特率,因此,在您的情况下,如果主频率不合适,则可能导致上述行为。
所以你有两个选择 1.纠正MPU核心频率 2.做一个试验&找到必须给出的值的错误方法是spi测试程序以获得所需的频率