SPI通讯原理,SPI驱动程序编写,EEPROM,Tja1145,CAN收发器驱动程序,嵌入式,单片机,软件

一、SPI通信原理讲解

0.架构讲解

1.通常CPU芯片(如TI的280049、英飞凌的TC234)中集成了SPI模块,CPU可使用SPI通讯模块实现与外部设备的通讯,如CPU与EEPROM模块的通讯,CPU与Tja1145模块的通讯,都是通过SPI模块实现的

2.当需要实现与Tja1145的通讯,在软件上需要两个驱动程序才能实现:SPI驱动程序、Tja1145驱动程序
a. SPI驱动程序,需要参考280049的芯片手册,芯片手册中会注明一系列SPI相关的系统寄存器,通过操作SPI系统寄存器就可以实现调用SPI驱动模块
b. Tja1145驱动模块,需要参考Tja1145芯片手册,芯片手册中会注明读写方式,和各寄存器的作用,通过配置对应寄存器即可实现CAN通讯的波特率配置等、休眠唤醒等

1.引脚

  1. SCLK:串行时钟,用来同步数据传输,由主机输出;
  2. MOSI:主机输出从机输入数据线(Master Output Slaver Input);
  3. MISO:主机输入从机输出数据线(Master Input Slaver Output);
  4. SS:片选线,低电平有效,由主机输出。

2.参考网址:

https://blog.csdn.net/bytxl/article/details/50324427

3.SPI要点总结

a.SPI读写都是调用一个函数接口,SPI驱动的读写接口函数只负责将主从芯片的缓存寄存器的内容(8bit)进行一次交换: spia_transfer_byte(u16 uwData),读或写数据的SPI接口
在这里插入图片描述

b.在SPI操作中,最重要的两项设置就是时钟极性(CPOL或UCCKPL)和时钟相位(CPHA或UCCKPH)。时钟极性设置时钟空闲时的电平,时钟相位设置读取数据和发送数据的时钟沿。
(如时钟的上升沿,主机开始操作MOSI(输出)引脚,此时从机开始读取MOSI的电平,从机获取到1bit数据;时钟的下降沿,从机开始操作MISO(输出)引脚,此时主机开始读取MISO的电平,从机获取到1bit数据;从而完成1bit数据的交换)

c. 时钟信号的解释:https://baike.baidu.com/item/%E6%97%B6%E9%92%9F%E4%BF%A1%E5%8F%B7/3414770?fr=aladdin)

二、示例,Tja1145收发器的驱动编写

1.驱动函数接口

1.IO口初始化:Tja1145_init(void),初始化SPI通讯IO口
2. 利用SPI通讯对Tja1145进行设备初始化:SpiaDrvierConfigForTja1145(),设备初始化完成之后可以读取外设的设备号寄存器,通过设备号内容可判断是哪个外设
3. 寄存器配置,初始化Tja1145各项参数(如波特率、工作模式、读取网络管理状态):Tja1145_config(void),
4. tja1145_read(u16* pData, u16 uwID, u16 uwDataLen), 读取寄存器的值【被Tja1145_config()调用】
5. tja1145_write(u16* pData, u16 uwID, u16 uwDataLen),将某寄存器写入值xxx【被Tja1145_config()调用】

2.初始化函数,Tja1145_init(void)

首先调用Tja1145_init(void),其函数的作用:
1.功能:初始化与Tja1145通讯的SPI通讯IO口
2.步骤:
a.初始化时钟引脚SCLK
b.初始化输出数据引脚MOSI
c.初始化输入数据引脚MISO
d.初始化片选脚SS
3.开发者使用注意点:
a.通常情况下一个程序需要使用到多个SPI外设,如boot程序使用到的EEPROM、Tja1145都是SPI外设,在对这两个外设进行SPI通道初始化时,SCLK、MOSI、MISO这三个引脚都相同,仅第4个引脚SS不同,需要读写哪个外设的寄存器时就将哪个外设的片选SS打开(拉低),读写完毕就关闭片选(拉高)

3.配置函数,Tja1145_config (void)

1.功能:寄存器配置,调用spi通讯接口,可实现初始化Tja1145各项参数(如波特率、工作模式、读取网络管理状态)

4. Tja1145利用SPI读数据的方法,将从机的指定寄存器(存储区)数据读取到主机:

a.SPI会进行一次数据交换,主机将寄存器地址发给从机(发送数据=从机寄存器地址*2+1;即数据的最低位为1),从机判断到此种数据格式后,会将改寄存器地址对应寄存器的数据拷贝到buf寄存器
b.SPI进行第二次数据交换,主机将读取到从机buf寄存器中所存放的数据

5. Tja1145利用SPI写数据的方法,将主机的数据写入到从机的指定寄存器:

a.SPI会进行一次数据交换,主机将寄存器地址发给从机(发送数据=(从机寄存器地址*2)&0xFE;即数据的最低位为0),从机判断到此种数据格式后,会准备好接收数据
b.SPI进行第二次数据交换,主机将数据放到主机的buf寄存器,然后传送给从机,从机之后会把buf寄存器的数据拷贝到对应地址的寄存器中

  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值