linux下i2c,spi,mdio的一些总结

文章目录


1. i2c

1.1 重要结构体

标识i2c controler: struct i2c_adapter					
表示I2C Device:	struct i2c_client				
表示要传输的数据:	struct i2c_msg		

1.2 传输数据的API

int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)					
s32 i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr, unsigned short flags, char read_write,u8 command, int protocol, union i2c_smbus_data *data)	

1.3 通用驱动

drivers/i2c/i2c-dev.c	

1.4 应用层的工具

i2c-tools

1.5 驱动模型(总线-设备-驱动)

1.5.1 总线结构体:struct bus_type i2c_bus_type					
1.5.2 设备结构体:struct i2c_client / struct i2c_adapter
1.5.3 驱动结构体:struct i2c_driver					

1.5.4 总线注册API:bus_register(&i2c_bus_type);					
1.5.5 设备注册API:					
	1.5.5.1: 通过I2C bus number来创建:
		int i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsigned len);			
	1.5.5.2: 通过设备树来创建:
		i2c总线节点下创建一个子节点,reg 标识设备地址			
	1.5.5.3: 无法知道该设备挂载哪个I2C bus下,无法知道它对应的I2C bus number:			
		i2c_new_device //新内核已改为i2c_new_clien_device 
		i2c_new_probed_device
	1.5.5.4: 通过用户空间(user-space)生成:			
		// 创建一个i2c_client, .name = "eeprom", .addr=0x50, .adapter是i2c-3
		# echo eeprom 0x50 > /sys/bus/i2c/devices/i2c-3/new_device
	
	1.5.6 驱动注册API;					
		int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
		i2c_add_driver

1.6 注册adapter

i2c_add_adapter

2. spi

2.1 重要结构体

标识spi controller:struct spi_master, spi_controller						
标识spi Device:    struct spi_device						
标识要传输的数据:  struct spi_message, <--spi_transfer		

2.2 传输数据的API

int spi_sync(struct spi_device *spi, struct spi_message *message);						
int spi_async(struct spi_device *spi, struct spi_message *message)						
					
spi_sync_transfer						
spi_write						
spi_read						

2.3 通用驱动

drivers\spi\spidev.c				

2.4 应用层的工具

tools\spi\spidev_fdx.c,内核提供的测试工具		

2.5 驱动模型(总线-设备-驱动)

	2.5.1 总线结构体:struct bus_type spi_bus_type						
	2.5.2 设备结构体:struct spi_device						
	2.5.3 驱动结构体:struct spi_driver						
	
	2.5.4 总线注册API:bus_register(&spi_bus_type);						
	2.5.5 设备注册API:spi_register_board_info 、 spi_new_device						
		来自设备树:	
			compatible:根据它找到SPI Device驱动
			reg:用来表示它使用哪个片选引脚
			spi-max-frequency:必选,该SPI设备支持的最大SPI时钟
	2.5.6 驱动注册API:spi_register_driver	

1.6 注册spiController

spi_register_controller					

3. mdio

3.1 重要结构体

标识mdio controller:struct mii_bus		//mdiobus_register
标识mdio device:    struct mdio_device		
标识要传输的数据:   NA			

3.2 传输数据的API

mdiobus_read		
mdiobus_write		
mdiobus_modify	

3.3 驱动模型(总线-设备-驱动)

3.3.1 总线结构体:struct bus_type mdio_bus_type		
3.3.2 设备结构体:struct mdio_device		
3.3.3 驱动结构体:struct mdio_driverstruct mdio_driver_common		
		
3.3.4 总线注册API:bus_register(&mdio_bus_type);		
3.3.5 设备注册API:mdiobus_register_device,mdio_device_register,mdiobus_create_device		
3.3.6 驱动注册API:mdio_driver_register		

3.4 注册adapter

mdiobus_register		
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值