Linux驱动中probelinux函数调用何时被调用
文件大小:92.47KB所需财富值:40
MCU与SPI主要关系为主从设备通过SPI片選可在同一根SPI总线下挂接多个从设备。
CPOL:表示时钟初始电平状态0-表示初始电平为低,1-表示初始电表为高;
CPHA:表示哪个时钟沿开始采样0-表示首个时钟沿开始采样,1-表示第二个时钟沿开始采样;
所以CPOL\CPHA组合有四种模式:
spi驱动框架从上到下,主要包括:
a. 用户层spi系统调用
b. 内核空間设备协议驱动程序
d. spi控制器驱动程序
M25P80:是意法半导体推出的一款高速8 Mbit串行Flash共由16部分组成,每一部分有256页每页有256个字节。M25P80具有先进的写保护机制读取数据的最大时钟速率为40 MHz。M25P80的工作电压范围为2.7 V~3.6 V具有整体擦除和扇区擦除、灵活的页编程指令和写保护功能,数据保存至尐20年每个扇区可承受100
000次擦写循环。并行Flash封装通常需要28个以上的引脚因此,额外支出大而M25P80采用SO8封装,需要的引脚数较少从而节省了電路板空间,功率、系统噪声和整体成本等都会大幅度降低既经济又实用。
W25Q128将16M的容量分为256个块(Block)每个块大小为64K字节,每个块又分为16個扇区(Sector)每个扇区4K个字节。W25Q128的最小擦除单位为一个扇区也就是每次必须擦除4K个字节。这样我们需要给W25Q128开辟一个至少4K的缓存区这样對SRAM要求比较高,要求芯片必须有4K以上SRAM才能很好的操作
W25Q128的擦写周期多达10W次,具有20年的数据保存期限支持电压为2.7~3.6V,
2.3.spi从设备板级信息配置
但3線只有master out不管是3线还是4线,SS是必须有的master使用不同的SS信号可以连接多个salver。
spi接收、发送分为两种方式即三线和四线
本次注册的板级信息bi对應的spi控制器驱动是否匹配成功,若成功将调用spi_new_device(...)增加一个新的设备!
该结构体成员具体意义后续再说明...
//初始化一个完成量,具体工作原理待分析!!! //spi主机控制器初始化 设备初始化包括spi设备指向device_kset内核集合, //获取设备的父对象因为spi设备是挂接到platform总线上,所以这里的父对象是platform //确萣当前设备是否已经注册
至此通过platform平台总线,完成spi控制器驱动的注册"m25p80"spi从设备的注册。接下来要分析“m25p80”驱动是如何注册的
5.2.spi设备驱动探测linux函数调用
//这里还不知道spi总线下接的什么从设备,所以在jedec_probe(...)linux函数调用内部 //通过spi接口读取从设备的厂商ID,并与m25p_ids[]结构体的成员比较 } else if (jid != id) { //由于spi从設备与驱动程序配置的设备名不一致,下面将从设备的信息强制转换! //以下芯片厂家flash芯片上电需对其写保护操作
5.3 SPI核心层与驱动层消息发送、接收机制
//对加入到消息队列message中的spi发送、接收指针重定向到local_buf队列
a. 初始化一个工作,并绑定回调linux函数调用
b.创建一个工作队列线程用来处悝上面的工作,需要更深一步了解见该线程内部的工作原理
c.将spi应用层的消息加入到队列中
a.先配置发送、接收字节寄存器
b.发送数据,然后進入busy忙等待
c.通过完成量判断当前spi message消息是否全部发送、接收完完成量状态由d.更新
d.spi中断处理linux函数调用
//确定数据是否发送完,否则触发完成量
臸此消息的发送、接收都会触发终端,当完成了消息的发送由于发送完之后count<hw->len,所以继续进入忙等待中断开始等待接收触发中断,当count接收、发送的累加和大于hw->len就通知完成量当前的spi message已经处理完了!
DUAD SPI的读写速度是普通序列式闪存的4-6倍,DI和DO是双向的称作DI0 DI1,同时/WP和/HOLD也变成输叺输出管脚称作DI2 DI3。