当前位置: 首页 > news >正文

沧州市网站建设电话黑帽seo培训网

沧州市网站建设电话,黑帽seo培训网,常德经开区网站,网站备案密码是什么样的资料下载&百问网技术交流群,百万嵌入式工程师聚集地: https://www.100ask.net/page/2248041 资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_fo…

资料下载&百问网技术交流群,百万嵌入式工程师聚集地:
https://www.100ask.net/page/2248041

资料下载

coding无法使用浏览器打开,必须用git工具下载:

git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git

视频观看

百问网驱动大全

I2C_Adapter驱动框架讲解与编写

参考资料:

  • Linux内核文档:

    • Linux-4.9.88\Documentation\devicetree\bindings\i2c\i2c-gpio.txt
    • Linux-5.4\Documentation\devicetree\bindings\i2c\i2c-gpio.yaml
  • Linux内核驱动程序:使用GPIO模拟I2C

    • Linux-4.9.88\drivers\i2c\busses\i2c-gpio.c
    • Linux-5.4\drivers\i2c\busses\i2c-gpio.c
  • Linux内核真正的I2C控制器驱动程序

    • IMX6ULL: Linux-4.9.88\drivers\i2c\busses\i2c-imx.c
    • STM32MP157: Linux-5.4\drivers\i2c\busses\i2c-stm32f7.c
  • 本节视频的代码在GIT仓库里

    • IMX6ULL:doc_and_source_for_drivers\IMX6ULL\source\04_I2C\05_i2c_adapter_framework
    • STM32MP157:doc_and_source_for_drivers\STM32MP157\source\A7\04_I2C\05_i2c_adapter_framework

1. 回顾

1.1 2C驱动程序的层次

在这里插入图片描述

1.2 I2C总线-设备-驱动模型

在这里插入图片描述

2. I2C_Adapter驱动框架

2.1 核心的结构体

1. i2c_adapter

在这里插入图片描述

2. i2c_algorithm

在这里插入图片描述

  • master_xfer:这是最重要的函数,它实现了一般的I2C传输,用来传输一个或多个i2c_msg

  • master_xfer_atomic:

    • 可选的函数,功能跟master_xfer一样,在atomic context环境下使用
    • 比如在关机之前、所有中断都关闭的情况下,用来访问电源管理芯片
  • smbus_xfer:实现SMBus传输,如果不提供这个函数,SMBus传输会使用master_xfer来模拟

  • smbus_xfer_atomic:

    • 可选的函数,功能跟smbus_xfer一样,在atomic context环境下使用
    • 比如在关机之前、所有中断都关闭的情况下,用来访问电源管理芯片
  • functionality:返回所支持的flags:各类I2C_FUNC_*

  • reg_slave/unreg_slave:

    • 有些I2C Adapter也可工作与Slave模式,用来实现或模拟一个I2C设备
  • reg_slave就是让把一个i2c_client注册到I2C Adapter,换句话说就是让这个I2C Adapter模拟该i2c_client

    • unreg_slave:反注册

2.2 驱动程序框架

分配、设置、注册一个i2c_adpater结构体:

  • i2c_adpater的核心是i2c_algorithm
  • i2c_algorithm的核心是master_xfer函数

1. 所涉及的函数

  • 分配

    struct i2c_adpater *adap = kzalloc(sizeof(struct i2c_adpater), GFP_KERNEL);
    
  • 设置

    adap->owner = THIS_MODULE;
    adap->algo = &stm32f7_i2c_algo;
    
  • 注册:i2c_add_adapter/i2c_add_numbered_adapter

    ret = i2c_add_adapter(adap);          // 不管adap->nr原来是什么,都动态设置adap->nr
    ret = i2c_add_numbered_adapter(adap); // 如果adap->nr == -1 则动态分配nr; 否则使用该nr   
    
  • 反注册

    i2c_del_adapter(adap);
    

2. i2c_algorithm示例

  • Linux-5.4中使用GPIO模拟I2C
    在这里插入图片描述

  • Linux-5.4中STM32F157的I2C驱动
    在这里插入图片描述

  • Linux-4.9.88中IMX6ULL的I2C驱动
    在这里插入图片描述

3. 编写一个框架程序

3.1 设备树

在设备树里构造I2C Bus节点:

	i2c-bus-virtual {compatible = "100ask,i2c-bus-virtual";};

3.2 platform_driver

分配、设置、注册platform_driver结构体。

核心是probe函数,它要做这几件事:

  • 根据设备树信息设置硬件(引脚、时钟等)
  • 分配、设置、注册i2c_apdater

3.3 i2c_apdater

i2c_apdater核心是master_xfer函数,它的实现取决于硬件,大概代码如下:

static int xxx_master_xfer(struct i2c_adapter *adapter,struct i2c_msg *msgs, int num)
{for (i = 0; i < num; i++) {struct i2c_msg *msg = msgs[i];{// 1. 发出S信号: 设置寄存器发出S信号CTLREG = S;// 2. 根据Flag发出设备地址和R/W位: 把这8位数据写入某个DATAREG即可发出信号//    判断是否有ACKif (!ACK)return ERROR;else {// 3. read / writeif (read) {STATUS = XXX; // 这决定读到一个数据后是否发出ACK给对方val = DATAREG; // 这会发起I2C读操作} else if(write) {DATAREG = val; // 这会发起I2C写操作val = STATUS;  // 判断是否收到ACKif (!ACK)return ERROR;}                }// 4. 发出P信号CTLREG = P;}}return i;
}

资料下载&百问网技术交流群,百万嵌入式工程师聚集地:
https://www.100ask.net/page/2248041

百问网技术论坛:
http://bbs.100ask.net/

百问网嵌入式视频官网:
https://www.100ask.net/index

百问网开发板:
淘宝:https://100ask.taobao.com/
天猫:https://weidongshan.tmall.com/

http://www.lbrq.cn/news/2465569.html

相关文章:

  • quiz在哪个网站做seo优化服务商
  • 旅游网站前端模板关键词的作用
  • 天水做网站电话seo深圳培训班
  • 规划营销型网站结构社会新闻最新消息
  • 良精企业网站系统小广告多的网站
  • 怎么免费制作网站平台舆情危机公关公司
  • 行业网站cms长沙seo推广公司
  • 网站前台与后台建设的先后次序企业线上培训课程
  • 自己怎么做家政网站如何做网站推广优化
  • 做视频点播网站如何赚钱自助建站seo
  • 中小企业门户网站的建设方案河北百度seo关键词排名
  • 上海网站微信平台建设search搜索引擎
  • 地方网站不让做吗进一步优化
  • ps做网站 大小seo培训价格
  • 公司网站 备案网站查询平台官网
  • 南京一站式工程装饰装修网站友情链接对网站的作用
  • 无锡网站建设企业排名百度广告投放价格表
  • 网站建设与管理维护的答案李建青网络推广方法技巧
  • 官方网站建设报价表关键词如何快速排名
  • 包头网站建设易通微信广告投放推广平台
  • 手机怎么做网站建立网站需要什么
  • 南京企业网站设计培训网站
  • 东道设计考研广州seo优化公司
  • 做正规网站有哪些官网关键词优化价格
  • 如何做二维码跳转到网站站长seo软件
  • b站视频推广网站2023厦门百度seo
  • 林业网站建设有哪些网站建设流程
  • 免费asp网站程序下载百度外推排名代做
  • 做网站还是网页设计软文怎么写比较吸引人
  • wordpress7.6百度seo排名原理
  • 数据结构 二叉树(2)---二叉树的实现
  • C++中使用Essentia实现STFT/ISTFT
  • 【57】MFC入门到精通——MFC 多线程编程总结
  • k8s常用基础命令总结
  • Linux应用开发基础知识——进程学习2(exec函数、system函数、popen函数)(三)
  • 4.1.2 XmlInclude 在 C# 中的作用及示例