spi接口

STM32 SD卡 TF卡 SPI 接口

蓝咒 提交于 2020-02-10 17:03:07
SD卡和TF卡管脚定义有区别,需要注意。 * +-------------------------------------------------------+ * | Pin assignment | * +-------------------------+---------------+-------------+ * | STM32 SPI Pins    | SD   | Pin |  TF Pin * +-------------------------+---------------+-------------+ * | SD_SPI_CS_PIN   | ChipSelect  | 1 |    2 * | SD_SPI_MOSI_PIN / MOSI  | DataIn  | 2 |    3 * | | GND | 3 (0 V)  | * | | VDD | 4 (3.3 V) |     |   4 * | SD_SPI_SCK_PIN / SCLK    | Clock   | 5 |    5 * | | GND | 6 (0 V)   |  6  |   6 * | SD_SPI_MISO_PIN / MISO    | DataOut  | 7 |   7 * +-------------------------+---------------+--

采用JDBC解释java SPI机制和线程上下文类加载器——————开开开山怪

折月煮酒 提交于 2020-02-09 14:05:52
采用JDBC解释JAVA SPI机制和线程上下文类加载器 SPI(Service Provider Interface)网上有关于SPI的解释,在这里我简单总结一下。 SPI机制可以做到将服务接口和真正的服务接口的实现类分开,可以增加程序的可扩展性,通过扫描规定的路径来进行实现类的获取,可以说是一种服务发现机制。 优点 : 在面向对象的设计中,我们一般建议基于接口的编程,如果代码中涉及到具体的实现类,如果我们想要换一种实现方案就不得不更改代码,但是采用接口的方式,只要我们采用一种机制,可以使得我们能够获取接口的不同的实现类,那么我们的代码的灵活性就比较的高,这种机制就是SPI。 SPI机制的工作过程 当服务提供者提供了服务接口的实现类,当实现类打成jar包之后,在jar包的META-INF/services/ 建立一个以服务接口名称为文件名称的文件,并且文件的内容为该服务接口的实现类的名称,那么当应用程序需要这部分功能模块的时候,就能通过META-INF/services/下的这个配置文件找到对应的实现类的名称,可以进行加载并且实例化。这也是同时也是服务提供者需要遵守的规则。 下面我们举例子所说的服务提供者就是mysql-connector-java-5.1.46-bin.jar 服务接口就是java.sql.Driver. 栗子: 在我们程序中,需要链接数据库的时候

SPI总线的特点、工作方式及常见错误解答

寵の児 提交于 2020-01-31 09:36:36
1.SPI总线简介    SPI (serial peripheral interface,串行 外围设备 接口)总线技术是Motorola公司推出的一种同步 串行接口 。它用于CPU与各种外围器件进行全双工、同步串行通讯。它只需四条线就可以完成MCU与各种外围器件的通讯,这四条线是:串行时钟线(CSK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)、 低电平 有效从机选择线CS。当SPI工作时,在移位 寄存器 中的数据逐位从输出引脚(MOSI)输出(高位在前),同时从输入引脚(MISO)接收的数据逐位移到移位寄存器(高位在前)。发送一个字节后,从另一个外围器件接收的字节数据进入移位寄存器中。即完成一个字节数据传输的实质是两个器件寄存器内容的交换。主SPI的时钟信号(SCK)使传输同步。其典型系统框图如下图所示。 图1 典型系统框图 2.SPI总线的主要特点   SPI 接口一般使用 4 条线通信:     MISO 主设备数据输入,从设备数据输出。     MOSI 主设备数据输出,从设备数据输入。     SCLK 时钟信号,由主设备产生。     CS 从设备片选信号,由主设备控制。   全双工;   可以当作主机或从机工作;   提供频率可编程时钟;   发送结束中断标志;   写冲突保护;   总线竞争保护等。 3.SPI总线 工作方式  

STM32的SPI问题。

做~自己de王妃 提交于 2020-01-31 09:25:56
问题描述 : 之前一直使用的单片机是LPC2109,对其SPI很熟悉。基本就是原本拿来稍作修改就用。 由于某种原因需要使用STM32,然后设备的驱动是之前写好的,只修改了一些硬件控制端口,由于硬件驱动使用到了SPI接口,而我是把SPI接口提供了出来,本来以为简单修改SPI配置到对应单片机就行了。简单看了STM3的SPI配置,轻车熟路改代码,瞬间体现了良好的接口有哈。 编译,生成目标文件,下载运行。 并没有出现预想的结果。由于之前的设备驱动是能用的,所以排除设备驱动问题。 开始以为是由于对STM32端口配置的不熟悉导致的、看手册,看别人代码,没发现问题。 debug........ 问题定在SPI代码上。查看配置,一样啊。郁闷!!! 把自己配置考到别人能用的代码中,可以使用。更加郁闷!!!! debug看寄存器。对比能运行代码寄存器状态。发现运行到一段代码的时候寄存器不同 SPI_CR 0x0043 SPI_CR 0x0002 看datasheet.OVR置位。问题应该就在这了。可是为什么呢?????? 搜此问题,此处出自 这里 溢出错误(OVR)  溢出错误表示连续传输多个数据时,后一个数据覆盖了前一个数据而产生的错误。  状态标志SPIF表示的是数据传输正在进行中,它对数据的传输有较大的影响。主器件的SPIF有效由数据寄存器的空标志SPTE=0产生

dubbo源码分析 -- dubbo的SPI机制

▼魔方 西西 提交于 2020-01-31 00:33:40
概念 在dubbo的整体结构中,除了service层和config层,其他各层都支持自定义扩展。而自定义扩展的实现,就是dubbo实现的一套类似SPI的扩展点加载机制。在这个机制中,ExtensionLoader是核心类。 组件 ExtensionLoader dubbo SPI机制的主要使用入口,基本就是通过这个类来使用和实现SPI机制的 ExtensionFactory dubbo的SPI机制,具备Ioc的功能特性。其实现主要由ExtensionFactory支持。大概的逻辑就是,如果某个组件具有setXX方法,则会通过ExtensionFactory为其注入依赖。ExtensionFactory在dubbo中,就类似与spring的BeanFactory,算是一种容器。 接口定义 @SPI //本身也支持dubbo的扩展点机制 public interface ExtensionFactory { //获取扩展类 < T > T getExtension ( Class < T > type , String name ) ; } 子类 SpringExtensionFactory:关联了spring的ApplicationContext SpiExtensionFactory:通过dubbo自己的SPI机制,读取指定目录下的文件

标准SPI、DUAL SPI、Quad SPI;NorFlash、NandFlash、eMMC闪存的比较与区别

泪湿孤枕 提交于 2020-01-29 01:04:49
标准SPI 标准SPI通常就称SPI,它是一种串行外设接口规范,有4根引脚信号:clk , cs, mosi, miso Dual SPI 它只是针对SPI Flash而言,不是针对所有SPI外设。对于SPI Flash,全双工并不常用,因此扩展了mosi和miso的用法,让它们工作在半双工,用以加倍数据传输。也就是对于Dual SPI Flash,可以发送一个命令字节进入dual mode,这样mosi变成SIO0(serial io 0),mosi变成SIO1(serial io 1),这样一个时钟周期内就能传输2个bit数据,加倍了数据传输 Qual SPI 与Dual SPI类似,也是针对SPI Flash,Qual SPI Flash增加了两根I/O线(SIO2,SIO3),目的是一个时钟内传输4个bit 所以对于SPI Flash,有标准spi flash,dual spi , qual spi 三种类型,分别对应3-wire, 4-wire, 6-wire,在相同clock下,线数越多,传输速率越高。 btw:spi flash一般为NOR Flash 快闪存储器(英语:Flash Memory),是一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写的存储器。这种科技主要用于一般性数据存储,以及在电脑与其他数字产品间交换传输数据,如储存卡与U盘

Java的spi介绍和简单应用

我只是一个虾纸丫 提交于 2020-01-26 13:40:22
1.什么是java的spi SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现。 具体是在JAR包的"src/META-INF/services/"目录下建立一个文件,文件名是接口的全限定名,文件的内容可以有多行,每行都是该接口对应的具体实现类的全限定名. 2.运用场景 比如你想扩展一些框架,如spring的一些功能,就是要实现它接口,然后自己配置了。 3.例子代码 先定义接口:    package com.ming.spi.service; /** * 定义一个dog的接口 * @author ming * */ public interface DogService { void sleep(); } 然后定义两个实现: package com.ming.spi.service.imp; import com.ming.spi.service.DogService; public class BlackDogServiceImpl implements DogService{ @Override public void sleep() { System.out

Java SPI

风流意气都作罢 提交于 2020-01-26 13:40:05
java spi的具体约定如下 : 当服务的提供者,提供了服务接口的一种实现之后,在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。 基于这样一个约定就能很好的找到服务接口的实现类,而不需要再代码里制定。 jdk提供服务实现查找的一个工具类:java.util.ServiceLoader 来源: https://www.cnblogs.com/fight-tao/p/5589961.html

SPI

扶醉桌前 提交于 2020-01-26 13:39:23
  面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候不用在程序里动态指明,这就需要一种服务发现机制。java spi就是提供这样的一个机制:为某个接口寻找服务实现的机制。这有点类似IOC的思想,将装配的控制权移到了程序之外。   定义接口,实现类 public interface SPITest { public String hello(); } public class SPITestImpl implements SPITest { @Override public String hello() { System.out.println("SPITestImpl hello"); return "SPITestImpl hello"; } }   在resources下新建META-INF/services/目录,然后新建接口全限定名的文件:com.alitrip.hotelfuture.hftrade.web.test.SPITest,里面加上我们需要用到的实现类 com.alitrip.hotelfuture.hftrade.web.test.SPITestImpl   写个测试 @Test public void

Java扩展方法之SPI

左心房为你撑大大i 提交于 2020-01-26 13:39:05
API: API(Application Programming Interface)表示应用程序编程接口 SPI: SPI(Service Provider Interface)表示服务提供商接口 API与SPI的关系 框架提供API及其实现,框架在实现过程中提供SPI回调机制。SPI是框架的扩展点。如果使用框架方要扩展框架,可以自己实现SPI并注入框架,于是框架使用方其实也是一个服务提供商。 SPI实现有两种方式,一种是第三方提供实现,另一种是应用自身自己提供实现 看一下API/SPI关系图1,第三方提供商实现了SPI,应用引入第三方提供商的第三方库 举例 java中JDBC是一个编程接口,而Driver是一个SPI,同时不同数据库厂商会提供Driver的实现。应用中要使用JDBC编程接口时需要引入第三方数据库厂商驱动包,第三方厂商提供的驱动包其实就是SPI的实现。 框架如何发现SPI? 框架可以使用java提供的java.util.ServiceLoader类得到SPI的实现。 如ServiceLoader<PullToolFactory> pullToolFactorys = ServiceLoader.load(PullToolFactory.class); 应用或第三方提供商如何注入SPI实现? 应用或第三方包在jar包的META-INF/services