24_ZYNQ7020开发板_SPI与Qflash芯片读写

内核中使用spi_master表示一个SPI主机控制器
一、SPI控制器驱动
1)spi_master申请与释放
SPI申请

struct spi_master *spi_alloc_master(struct device *dev, unsigned size)

dev一般是platform_device中的dev成员变量
size是私有数据大小
申请成功返回spi_master
SPI释放

void spi_master_put(struct spi_master *master)

2)SPI_master注册与注销
spi_master 初始化函数

int spi_register_master(struct spi_master *master)

函数注销

void spi_unregister_master(struct spi_master *master)

二、SPI设备驱动
3)内核注册函数

int spi_register_driver(struct spi_driver *sdrv)

4)函数注销spi_driver

void spi_unregister_driver(struct spi_driver *sdrv)

三、SPI设备驱动中数据收发处理
1)spi_transfer
spi_transfer用于描述spi的传输信息
在这里插入图片描述
tx_buf、rx_buf分别是保存和接收数据
len是数据长度、spi是全双工通信
2)spi_message相当于spi_transfer的发送队列,spi_transfer需要添加到spi_message中发送出去。
3)spi_message_init()
spi_message需要用次函数去初始化
4)spi_message_add_tail()
spi_message初始化完成后使用spi_message_add_tail()函数把spi_transfer添加到spi_message中

void spi_message_add_tail(struct spi_transfer *t, struct spi_message *m)

在这里插入图片描述
四、实验
使用7020上的QSPI读写qflash
五、原理图
在这里插入图片描述
在这里插入图片描述
六、设备树
打开设备树system-user.dtsi文件
在这里插入图片描述
七、驱动程序
ax-spi-drv.c

/** ===================================================== **
 *Author : ALINX Electronic Technology (Shanghai) Co., Ltd.
 *Website: http://www.alinx.com
 *Address: Room 202, building 18, 
           No.518 xinbrick Road, 
           Songjiang District, Shanghai
 *Created: 2020-3-2 
 *Version: 1.0
 ** ===================================================== **/
 
#include <linux/err.h>
#include <linux/errno.h>
#include <linux/device.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
#include <linux/spi/spi.h>
#include <linux/spi/flash.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/ide.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/cdev.h>
#include <linux/fs.h>
#include <linux/fcntl.h>
#include <linux/platform_device.h>
#include <asm/mach/map.h>
#include <asm/uaccess.h>
#include <asm/io.h>

/* 驱动个数 */  
#define AX_FLASH_CNT  1
/* 设备节点名称 */ 
#define AX_FLASH_NAME "ax_flash"

/* Flash操作命令 */   
#define CMD_WRITE_ENABLE    0x06      
#define CMD_BULK_ERASE      0xc7  
#define CMD_READ_BYTES      0x03  
#define CMD_PAGE_PROGRAM    0x02 
#define CMD_MAX                 5   

struct ax_qflash_dev {
   
   
    dev_t   devid;              //设备号
    struct  cdev cdev;          //字符设备
    struct  class *class;       //类
    struct  device *device;     //设备
    int     major;       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值