zoukankan      html  css  js  c++  java
  • 关于 printk() 对 spi slave 内核驱动程序的性能影响

    调试 imx6 的 spi slave 内核驱动,前期调试总免不了得要追一下寄存器的设置,过程函数的调用。

    采用了 printk() 打印语句。

    1、采用的硬件方法是:

    分析 imx6 spi slave 的各路引脚主要是 clk, cs, mosi, miso, gnd, vcc,连接至spi 主端(CC1110f32 MCU)

    的各路对应引脚。对应如下:

     imx6 spi 从机 cc1110f32 spi 主机
    vcc vcc
    gnd gnd
    clk   clk
    cs cs
    mosi mosi
    miso miso

    2、采用的软件方法是:

    1)官方的补丁程序 https://community.freescale.com/docs/DOC-97380

    2)不能直接打补丁,照着修改之后,参考spi datasheet 进行源码分析,使用printk() 跟踪数据流

    3)确保主从端使用的 cpol, cpha, cs, sclk 的配置一致

    3、最终结果:

    spi slave 端只能正确接收从spi 主端发出的单个字节的数据,接收多个数据后数据发生丢字节情况。

    在每个片选之间加 类似于

    for (i=0; i < 10000; i++);

    的延时后发现,当i < 10000时,多个字节数据接收正确,当 i < 5000 时,多个字节数据只接收了一半正确数据。

    比如 0 1 2 3 4 5 6 7 8 9 在 i < 10000 时,spi slave 端接收到的是 0 1 2 3 4 5 6 7 8 9

    在 i < 5000 时, spi slave 端接收到的是 0 2 4 6 8

    在 i < 2000 时,spi slave 端接收到的甚至是 0 4 8

    于是,将内核中的 printk() 去掉之后,发现只要在每次片选之间添加不到100us  的延时,接收端即可正确接收

    主spi 端发来的数据,而无数据丢失。

    至此,得出一个结论:在涉及通讯类总线的调试时,前期在 printk() 的情况下进行单字节的发送接收是可以的。

    一旦面临快速发送接收的时候,printk() 这样的调试语句将严重影响总线的性能,毕竟 printk() 占用了总线通信

    时间。

  • 相关阅读:
    html调用hadoop WebHDFS REST API
    推荐相关
    Resources of Studying Hadoop
    远程调试Hadoop(转)
    MYSQL复制的几种模式
    Hadoop实战第四章读书笔记
    FMS3系列(七):FMS案例开发视频聊天室
    Flex与.NET互操作系列文章
    使用FluorineFx Silverlight库实现Silverlight远程过程调用(RPC)
    修改 MySQL帐号密码,增加新用户
  • 原文地址:https://www.cnblogs.com/aqing1987/p/4423283.html
Copyright © 2011-2022 走看看