本文共 765 字,大约阅读时间需要 2 分钟。
1:gpio可以配成多个function ,本质上是因为这些function在soc里面已经存在,但是为了不让soc有太多的pin脚,所以只用一个pin脚来复用。选function的过程,其实就是有个开关,选哪个function,就把开关打到哪个function上。
2:i2c controller 在soc内部就相当于一个function。 如果这个function 和 gpio 复用在一个pin上了,那么用的时候就需要指定 function 为 i2c(例如 func1)
3:gpio 模拟 i2c有什么怎么回事儿呢。
这跟 gpio 和i2c 复用一个pin完全没关系, 这时候这个pin上没有i2c的function共选择。
有些情况下,比如很早期,i2ccontroller很少, 但是用到的设备却很多; 又比如,有些设备对i2c传输的要求很特殊,比如hdmi对i2c clck的要求只是10k,特别的低,很有可能有些i2c controller 满足不了。这些时候,就可以用gpio来模拟。 所以,首先要保证,这2个pin的设置为gpio。
由于gpio本身之后拉高拉低的功能,但是i2c又是需要协议的,所以要完成gpio 模拟成i2c的功能需要 以下几个主要文件:
1: I2c-gpio.c (y:\kernel\drivers\i2c\busses) 对gpio进行高低,和clck的基本操作。
2: I2c-algo-bit.c (y:\kernel\drivers\i2c\algos) i2c 协议的操作。
4:对于非gpio模拟的i2c,就不需要格外的 driver,只需要 正常的 i2c_register_board_info ,或者 platform_device_register即可使用。
转载地址:http://hvhai.baihongyu.com/