根据面经准备面试-第一期-2026小米嵌入式软开
#嵌入式笔面经分享##牛客AI配图神器#1.I2C协议时序
I2C协议是两线制串行通信协议,物理层包括SCL时钟线、SDA数据线,支持一主多从架构
核心时序包括起始信号:
scl为高电平,sda从高到低跳变,标志通信开始
scl为高电平,sda从低到高跳变,标志通信结束
数据传输时:scl高电平时,sda必须稳定,低电平时sda可变化,准备下一位,每个字节八位,高位在前
接收方在第 9 个时钟周期拉低 SDA 表示应答,不拉低为非应答
主设备通过控制scl和sda生成起始信号,发送从设备地址(7位地址+1位读写位),等待应答后传输数据,最后停止信号结束
2.I2C 协议的应用场景和实现
我在项目中用 I2C 连接过温湿度传感器(如 SHT30)和 EEPROM,传感器通过 I2C 将采集的数据传给 MCU,EEPROM 通过 I2C 存储配置参数,
3.Linux 下 I2C 驱动编程的三层结构
回答:linux下I2C驱动为核心层、总线层、设备驱动层
核心层:提供通用api,管理总线和设备的匹配关系,是连接总线层和设备驱动层的桥梁
总线层(控制器驱动):对应具体I2C控制器,实现硬件时序,负责将核心层的抽象请求转化为实际的 SCL/SDA 电平操作
设备驱动层(外设驱动):针对具体 I2C 设备(如传感器),定义i2c_driver结构体,实现probe(初始化设备)、remove(清理)等函数,通过核心层 API 与设备通信。
4.platform 与设备树的区别
platform总线:是Linux内核为无物理总线的片上外设(GPIO、定时器)设计的虚拟总线
设备树:是一种文本文件,用树形结构描述硬件信息(外设、引脚、中断),替代传统板级C代码,驱动通过属性与设备树节点匹配
核心区别:platform 是 “驱动 - 设备” 匹配机制,设备树是 “硬件信息描述工具”;现代内核中,platform 设备通常由设备树自动生成
5.Linux 下如何获取设备树中的硬件信息
内核通过of函数解析设备树,查找节点,
6.TCP 与 UDP 的区别,Socket 编程步骤及差异
TCP服务器编程步骤:
socket创建TCP套接字
bind绑定ip和端口
listen监听连接
accept阻塞等待客户端连接,返回新套接字
recv收发数据
close关闭连接
UDP无需listen、accept、connect
收发用sendto,需指定目标地址,UDP无连接概念,一个套接字可与多个地址通信
7.IO复用:select、poll、epoll区别
三者均用于单线程管理多个I/O流,
8.Linux 字符设备驱动设计流程,read/write 实现及应用访问方式
定义file_operations结构体,实现open/read/write/release等操作函数,注册字符设备:通过cdev_init初始化cdev,cdev_add注册到内核,分配设备号(alloc_chrdev_region),创建设备文件:通过class_create和device_create自动生成/dev/xxx(替代手动mknod。
read从设备读取数据到用户空间,内核到用户
write是从用户空间写入到设备,从用户到内核
应用程序访问方式 1打开设备,获取文件描述符
2.调用驱动的read函数,数据通过copy_to_user传递到buf
3.调用驱动的write函数,数据通过copy_from_user从buf传入内核
I2C协议是两线制串行通信协议,物理层包括SCL时钟线、SDA数据线,支持一主多从架构
核心时序包括起始信号:
scl为高电平,sda从高到低跳变,标志通信开始
scl为高电平,sda从低到高跳变,标志通信结束
数据传输时:scl高电平时,sda必须稳定,低电平时sda可变化,准备下一位,每个字节八位,高位在前
接收方在第 9 个时钟周期拉低 SDA 表示应答,不拉低为非应答
主设备通过控制scl和sda生成起始信号,发送从设备地址(7位地址+1位读写位),等待应答后传输数据,最后停止信号结束
2.I2C 协议的应用场景和实现
我在项目中用 I2C 连接过温湿度传感器(如 SHT30)和 EEPROM,传感器通过 I2C 将采集的数据传给 MCU,EEPROM 通过 I2C 存储配置参数,
3.Linux 下 I2C 驱动编程的三层结构
回答:linux下I2C驱动为核心层、总线层、设备驱动层
核心层:提供通用api,管理总线和设备的匹配关系,是连接总线层和设备驱动层的桥梁
总线层(控制器驱动):对应具体I2C控制器,实现硬件时序,负责将核心层的抽象请求转化为实际的 SCL/SDA 电平操作
设备驱动层(外设驱动):针对具体 I2C 设备(如传感器),定义i2c_driver结构体,实现probe(初始化设备)、remove(清理)等函数,通过核心层 API 与设备通信。
4.platform 与设备树的区别
platform总线:是Linux内核为无物理总线的片上外设(GPIO、定时器)设计的虚拟总线
设备树:是一种文本文件,用树形结构描述硬件信息(外设、引脚、中断),替代传统板级C代码,驱动通过属性与设备树节点匹配
核心区别:platform 是 “驱动 - 设备” 匹配机制,设备树是 “硬件信息描述工具”;现代内核中,platform 设备通常由设备树自动生成
5.Linux 下如何获取设备树中的硬件信息
内核通过of函数解析设备树,查找节点,
6.TCP 与 UDP 的区别,Socket 编程步骤及差异
TCP服务器编程步骤:
socket创建TCP套接字
bind绑定ip和端口
listen监听连接
accept阻塞等待客户端连接,返回新套接字
recv收发数据
close关闭连接
UDP无需listen、accept、connect
收发用sendto,需指定目标地址,UDP无连接概念,一个套接字可与多个地址通信
7.IO复用:select、poll、epoll区别
三者均用于单线程管理多个I/O流,
8.Linux 字符设备驱动设计流程,read/write 实现及应用访问方式
定义file_operations结构体,实现open/read/write/release等操作函数,注册字符设备:通过cdev_init初始化cdev,cdev_add注册到内核,分配设备号(alloc_chrdev_region),创建设备文件:通过class_create和device_create自动生成/dev/xxx(替代手动mknod。
read从设备读取数据到用户空间,内核到用户
write是从用户空间写入到设备,从用户到内核
应用程序访问方式 1打开设备,获取文件描述符
2.调用驱动的read函数,数据通过copy_to_user传递到buf
3.调用驱动的write函数,数据通过copy_from_user从buf传入内核
全部评论
同学,瞅瞅我司,医疗独角兽,校招刚开,HC充足,我的主页最新动态,绿灯直达,免笔试~
同学面的手机部还是汽车部,这些问题是根据简历上的项目提问的吗,还是单纯的问的八股
相关推荐
08-18 21:53
西北工业大学 嵌入式工程师 点赞 评论 收藏
分享