• 2.6.33中关于at91sam9260的i2c controller驱动的问题


    在为at91sam9260移植2.6.33内核的I2C时,直接用driver/bus/i2c-at91.c这个iic的adapter驱动是不能用的,而且在makemenuconfig时,在devicedriver/i2c菜单下是看不到它的选项的。这是为什么呢?

    可以通过看driver/i2c/buses/Kconfig看到,对于I2C_AT91项选的依赖多了一个BROKEN这个选项,如下:

    280 config I2C_AT91

    281         tristate"Atmel AT91 I2C Two-Wire interface (TWI)"

    282         depends onARCH_AT91 && EXPERIMENTAL&&BROKEN

    283         help

    284           Thissupports the use of the I2C interface on Atmel AT91

    285          processors.

    286

    287           Thisdriver is BROKEN because the controller which it uses

    288           willeasily trigger RX overrun and TX underrun errors.  Using

    289           low I2Cclock rates may partially work around those issues

    290           on somesystems.  Another serious problem is thatthere is no

    291          documented way to issue repeated START conditions, as needed

    292           tosupport combined I2C messages.  Use thei2c-gpio driver

    293           unlessyour system can cope with those limitations.

    而这个broken是在init/Kconfig下定义的,如下:

    57 config BROKEN

    58         bool

    59

    60 config BROKEN_ON_SMP

    61         bool

    62         depends onBROKEN || !SMP

    63         default y
    在这里broken是一个bool值,同时它没有一个显示的菜单名,所以在makemenuconfig时,我们是看不到它的选项的,所以它也就没有打开,一直为n。

    这就说明,在2.6.33中at91sam9260的i2c的驱动i2c-at91.c是不能用的,同时可以通过I2C_AT91下的comments也可以看到:

    This driver is BROKEN because the controller which it uses willeasily trigger RX overrun and TX underrun errors.  Using  lowI2C clock rates may partially work around those issues on some systems.  Another serious problem is that there is no  documented way to issue repeated STARTconditions, as needed  to supportcombined I2C messages.  Use the i2c-gpiodriver  unless your system can cope withthose limitations.

       此驱动程序被破坏,因为它使用的控制器很容易会触发溢出RX和TX欠载错误。在某些系统上,使用低 时钟速率可能部分地解决这些问题。另一个严重的问题是,有没有记录的方式发出重复的起始条件,需要支持结合I2C消息。请使用I2C-GPIO驱动程序,除非您的系统可以应付这些限制。

    所以我们在2.6.33的内核中,对于at91sam9260的i2c  controller的驱动我们用i2c-gpio.c,用gpio来模拟。

          364 config I2C_GPIO

        365         tristate "GPIO-based bitbangingI2C"

        366         depends on GENERIC_GPIO

        367         select I2C_ALGOBIT

        368         help

        369           This is a very simple bitbanging I2Cdriver utilizing the

    370           arch-neutral GPIO API to control theSCL and SDA lines.


    至于为什么这样,暂时不管,我用了i2c-at91.c的驱动,是有问题,在接收时会超时。

  • 相关阅读:
    Nacos安装部署文档
    mysql安装部署文档
    Postgresql数据库安装部署文档
    Sentinel安装部署文档
    Nginx安装部署手册
    golang 7. defer
    golang 6. 指针 *
    golang 5. import
    golang 4. 函数 func
    golang 3. 常量 const iota
  • 原文地址:https://www.cnblogs.com/james1207/p/3253891.html
Copyright © 2020-2023  润新知