SPI接口调试

news2024/11/28 13:47:57

本文记录了复旦微fmql45t900 SPI裸核和linux系统下spi接口的调试步骤。

问题描述:

复旦微fmql45t900 SPI接口片选信号无法拉低控制。

原因分析:

为了排除硬件问题,创建spi裸核测试工程进行单步调试,spi发送数据时用示波器可以正常量到spi发送的数据和片选拉低信号,数据发送完后片选自动拉高。

当procise将相关MIO端口配置成spi功能时,对应的MIO30口默认配置为spi0的片选,当spi发送fifo非空时会自动拉低,无法作为通用GPIO口进行控制。

解决措施:修改spi测试工程中ps_init.c文件,将MIO30口配置成普通GPIO口,修改如下:

注意:在线调试时如果先加载了fsbl工程再加载的话,最好将fsbl工程和spi测试工程中的ps_init.c都进行修改,如果只修改fsbl工程后面再加载spi测试工程时再次初始化端口可能会覆盖之前的配置。

测试验证:

裸核测试验证

在spi测试工程fmsh_gpio_exampl.c中增加以下片选设置代码:

/*功能:片选设置
参数:
port:片选对应gpio口,共32个口,spi0片选对应端口30
value:gpio值,0拉低 1拉高
*/
u8 FGpioPs_cs_set(int port, int value)
{
    FGpioPs_T gpioDevA;
    FGpioPs_init(&gpioDevA, FGpioPs_LookupConfig(GPIO_DeviceID));
    static unsigned int staus = 0xFFFFFFFF;

    FGpioPs_setDirection(&gpioDevA, 0xFFFFFFFF);    /*set gpio direction all output */
    
    if(value)
    {
      staus |= (1 << port);
      FGpioPs_writeData(&gpioDevA, staus);       /*output high level to gpio pins*/ 
    }
    else
    {
      staus &= (~(1 << port)); 
      FGpioPs_writeData(&gpioDevA, staus);       /*output low level to gpio pins*/
    }

    return 0;
}
在spi测试工程fmsh_spi_exampl.c中修改spi测试函数FSpiPs_example如下:
int FSpiPs_example(void)
{
    FSpiPs_T* spi0Ptr;
    FSpiPs_T* spi1Ptr;
    int status = FMSH_SUCCESS;
    u32 data;
    spi0Ptr = &spi0;
    
    /* spi0 master, spi1 slaver */
    FSpiPs_Initialize(spi0Ptr, FPS_SPI0_DEVICE_ID);
    FSpiPs_Reset(spi0Ptr);
    FSpiPs_Initialize_Master(spi0Ptr);
    /*将spi0片选拉低*/       
    FGpioPs_cs_set(30, 0);
    /*发送数据*/
    FSpiPs_Send(spi0Ptr, 0xf3); 
    /*将spi0片选拉高*/    
    FGpioPs_cs_set(30, 1);
    return status;
}

Linux系统下使用spi步骤:

a、将上述修改后的fsbl工程编译生成FSBL.out文件

b、修改dts设备树文件添加spi设备节点,修改如下:

spi@e0001000 {

//spi控制器名称,和spi主控制器驱动匹配

compatible = "fmsh,dw-apb-ssi", "snps,dw-apb-ssi";

#address-cells = <0x1>;

#size-cells = <0x0>;

reg = <0xe0001000 0x1000>; //spi控制器寄存器地址、长度

interrupts = <0x0 0x16 0x4>;

num-cs = <0x2>;  //支持两个片选

clocks = <0x1 0x27 0x1 0x29>;

clock-names = "clk_ref", "pclk";

reg-io-width = <0x4>;

spi-max-frequency = <0xf4240>;

status = "okay";

//片选信号,0xb表示GPIO,对应porta,0x1e表示对应MIO30端口,0表示低电平有效

cs-gpios = <0xb 0x1e 0x0 0xb 0x1f 0x0>;

// spi控制器连接的设备0

spidev0:dh2228@0 {

compatible = "rohm,dh2228fv"; //设备名称,和spi设备驱动匹配

reg = <0x0>; //片选0

spi-max-frequency = <0x1000000>;

};

// spi控制器连接的设备1

spidev1:dh2228@1 {

compatible = "rohm,dh2228fv";

reg = <0x1>;//片选1

spi-max-frequency = <0x1000000>;

};

};

上述节点中的片选gpio设备树节点由procise将MIO配置成GPIO后自动生成,如下所示:

gpio@e0003000 {

compatible = "snps,dw-apb-gpio";

reg = <0xe0003000 0x100>;

#address-cells = <0x1>;

#size-cells = <0x0>;

clocks = <0x1 0x2d>;

status = "okay";

gpio-controller@0 {

compatible = "snps,dw-apb-gpio-port";

bank-name = "porta";

gpio-controller;

#gpio-cells = <0x2>;

snps,nr-gpios = <0x20>;

reg = <0x0>;

interrupt-controller;

#interrupt-cells = <0x2>;

interrupts = <0x0 0x11 0x4>;

linux,phandle = <0xb>;

phandle = <0xb>;

};

};

c、用dtc工具将步骤b修改后的dts编译成dtb, dtc工具使用命令如下(xxx表示对应dtb和dts文件名):

dtc  -I  dts -O  dtb  -o xxx.dtb  xxx.dts  

d、用dtb编译对应的uboot.elf文件,将uboot.elf和FSBL.out生成BOOT.bin

e、配置内核,增加spi驱动相关配置,重新编译内核(复旦微提供的内核默认已经配置相关项):

 

其中CONFIG_SPI_DW_FMSH对应复旦微spi主控制器驱动, CONFIG_SPI_SPIDEV对应spi外接设备驱动,其他为spi驱动框架涉及的核心和片选控制驱动代码。

完成上述步骤、进入系统后会在/dev目录下生成对应的spi设备文件,应用程序可以对设备文件进行读写操作。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/723794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA USB FX2 图片发送试验 驱动CY7C68013A实现 提供2套工程源码和技术支持

目录 1、前言2、我这儿已有的 FPGA USB 通信方案3、CY7C68013A芯片解读和硬件设计FX2 简介SlaveFIFO模式及其配置 4、工程详细设计方案输入测试图片的处理PC上位机发送测试图片图像接收与缓存图像输出显示 5、vivado工程1--LCD输出显示6、vivado工程1--LCD输出显示7、上板调试验…

vue数组深层赋值

一、问题 使用vue开发的项目&#xff0c;有一个页面的data中定义了两个数组&#xff0c;需要把其中一个数组赋值给另一个数组的其中一个对象的一个属性&#xff08;有点拗口&#xff09;&#xff0c;如图所示&#xff1a; 二、错误赋值 直接使用opts:this.print_name&#xf…

el-button与i标签实现区域切换效果

题记&#xff1a;我们工作中需要实现内容区域切换放大缩小的效果&#xff0c;其实道理很简单&#xff0c;给事件给样式即可。 #el-button与i标签实现区域切换效果 ##图片展示&#xff1a; ##代码实现 ###template部分 <div class"right"><el-button type&…

【SQL应知应会】行列转换(三)• Oracle版

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 行列转换 • Oracle版 oracle的行列转换前言1.数据…

Perhaps you are running on a JRE rather than a JDK?

我记得我遇到过好多次 mvn clean package的时候报错&#xff1b; 最后检查时这里的路径配置错了

蓝牙耳机品牌排行榜前十名!2023年超全蓝牙耳机合集!

虽然称不上发烧友&#xff0c;但近年来用过的蓝牙耳机少说也有几十款了。这篇文章以近年来市面上的热销且评价都比较高的十款蓝牙耳机为主要推荐对象&#xff0c;来给大家做一期有关于蓝牙耳机的实测体验以及提供相关的选购思路&#xff0c;希望能为大家的选择出一份力。 第一…

# TSWIKI 0.2 版本

TSWIKI 0.2 版本 TSWIKI 0.2 版本经过这段时间的改进&#xff0c;增加了搜索&#xff0c;版本变更查看等功能&#xff0c;基本开发完成。功能方面已经与 gollum 类似。 功能改进说明 1、GIT 版本变更查看功能 实现 git 版本变更查看功能, 在 markdown 文档查看界面&#xf…

day 44 完全背包

完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 完全背包和01背包问题唯一不同…

LLVM介绍

LLVM项目是什么 工业级编译技术集合 优化器和代码生成器llvm-gcc和Clang前端MSIL和.NET虚拟机开源项目 行业组织、研究团体和个人 LLVM愿景 主要使命&#xff1a;构建一套模块化的编译器组件&#xff1a; 减少构建特定编译器的时间和成本组件可以在不同的编译器之间共享使用…

OpenCat:一个基于Arduino和Raspberry Pi的开源四足机器人宠物框架

一个深圳项目&#xff0c;OpenCat&#xff1a;一个基于Arduino和Raspberry Pi的开源四足机器人宠物框架。 项目灵感来自于到波士顿动力公司Big Dog和Spot Mini的启发。 OpenCat提供了一个基础的开源平台&#xff0c;可以创建令人惊奇的可编程步态、运动四足机器人。它可以进行复…

什么是孪生视频,孪生视频是什么意思,她的关键技术,及应用场景案例

视频孪生&#xff0c;即视频数字孪生。是集三维地理信息系统、视频虚实融合、数字孪生、人工智能、时空位置智能、地球空间网格编码、知识图谱于一体的多学科、多维度、多尺度的综合技术应用&#xff0c;是对数字孪生的创新升级。 什么是视频孪生&#xff0c;视频孪生的关键技术…

c++ 之decay简单介绍

简介 std::decay是C获取类型的一种方式&#xff0c;它定义在<type_traits>头文件中。 #include <type_traits>模型 template< class T > using decay_t typename decay<T>::type; //(since C14)使用示例 template<typename T> static void …

关于流程图svg线条流动的效果-jq

获取所有的SVG并加上相应的样式 var svgElement $(svg.jtk-connector);console.info(svgElement,svgElement)var pathElement svgElement.find(path:first);pathElement.attr(class, connector-line);pathElement.attr(fill, transparent);pathElement.attr(stroke, #1890ff)…

vue3项目打开本地pdf文件实现方法

vue3项目打开本地pdf文件实现方法 效果图引入pdf插件pdf页面封装pdf存放目录结语 效果图 引入pdf插件 注意一定要这个版本&#xff0c;不然会报错key.split(...).at is not a function npm install pdfjs-dist2.12.313pdf页面封装 <template><div class"pdf-co…

饮料市场京东销售数据分析(京东大数据)

近日&#xff0c;关于“阿斯巴甜可能是致癌物”的话题持续发酵&#xff0c;众所周知阿斯巴甜是常见的人工甜味剂之一&#xff0c;并被广泛应用于无糖可乐以及一些饮料产品中&#xff0c;而这一话题引起人们的巨大恐慌。 阿斯巴甜致癌与否尚未定论&#xff0c;但这一言论也引得…

【学习笔记-QGIS】 QGIS从零快速上手

原文感谢作者才华横溢吴道简 安装文章参考&#xff1a;https://zhuanlan.zhihu.com/p/370633306 一、下载安装 QGIS免费开源&#xff0c;中文界面&#xff0c;下载地址&#xff1a;https://download.qgis.org/downloads/ 三、配置中文环境 开始——QGIS 3.18——QGIS Deskto…

SpringBoot2+Vue2实战(十)权限管理之动态菜单、动态路由生成

一、父子菜单实现 新建数据库表 sys_menu sys_role 实体类 Role import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName;import java.io.Serializable;import l…

Numpy速通笔记

Numpy可以高效处理大数组的数据&#xff0c;因为&#xff1a; Numpy在一个连续的内存块中存储数据&#xff0c;独立于其他Python内置对象。Numpy是C写的&#xff0c;有优化&#xff0c;比Python内置序列使用的内存少可以在整个数组上进行复杂运算&#xff0c;不需要for循环 下…

table的tr动态增加(含html示例)

html页面table的tr动态增加&#xff08;含示例&#xff09; 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>简单示例</title><script type"text/javascript">function …

陶建辉在“2023 可信数据库发展大会”发表演讲,TDengine 入选中国数据库产业图谱

当前&#xff0c;全球数字经济加速发展&#xff0c;数据正在成为重组全球要素资源、重塑全球经济结构、改变全球竞争格局的关键力量。数据库作为存储与处理数据的关键技术&#xff0c;在数字经济大浪潮下&#xff0c;全球数据库产业中新技术、新业态、新模式不断涌现。 7 月 4…