[linux/driver]SPI客户端驱动

linux设备平台驱动之SPI驱动

协议和硬件特点

编写SPI客户端驱动程序需要的主体步骤

  • 1.声明驱动程序支持的ID,可以用spi_device_id
    • 如果支持DT,可以使用of_device_id
    • 可以只用DT
  • 2.调用MODULE_DEVICE_TABLE(spi, my_id_table),向SPI内核注册设备列表
    • 如果支持DT,则必须调动MODULE_DEVICE_TABLE(of, your_of_match_table),向OF核心注册设备列表
  • 3.根据需要编写probe/remove
    • probe:识别设备,配置设备,定义设备专用数据,spi_setup配置总线(如需要),向相应的内核框架注册
    • remove:删除在probe函数中的操作
  • 4.声明并且填充sruct spi_driver
    • 将已经创建的ID数组设置id_table
    • 支持TD则使用of_device_id数组设置.of_match_table字段
  • 5.使用module_spi_driver(my_spi_driver),向内核注册函数
    static const struct spi_device_id myspi_spi_id[] = {
    	{"myspi", 0},
    	{}
    };
    MODULE_DEVICE_TABLE(spi, myspi_spi_id);
    
    static const struct of_device_id of_myspi_spi_match[] = {
    	{ .compatible = "xxxxxx,myspi", },
    	{}
    };
    MODULE_DEVICE_TABLE(of, of_myspi_spi_match);
    
    static struct spi_driver myspi_spi_driver = {
    	.driver = {
    		.owner = THIS_MODULE,
    		.name = "myspi_spi",
    		.of_match_table = of_match_ptr(of_myspi_spi_match),
    	},
    	.probe = myspi_probe,
    	.remove = myspi_remove,
    	.id_table = myspi_spi_id,
    };
    
    module_spi_driver(myspi_spi_driver);
    
    MODULE_LICENSE("GPL v2");
    
    

读写接口实现

  • 核心函数: spi_write_then_read
    int spi_write_then_read(struct spi_device *spi,
                    const u8 *txbuf, unsigned n_tx,
                    u8 *rxbuf, unsigned n_rx);
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值