TI 硬件SPI调试

这久在做一个无线数传模块的驱动,需要写一个CC2530的SPI驱动,结果弄了两个晚上,这个芯片有些地方实在是很有意思。
它的datasheet里面对于SPI的极性和相位的解释,很复杂。


其实,这里完全可以说的比较明了。
CPOL为0时,空闲的时候SCK为低电平。当CPOL为1时,空闲的时候SCK为高电平。
CPHA呢,当等于1时,在第二个边沿采样,当它为0时,在第一个边沿采样。
然后,对于SPI速率的配置,给了个公式


不过,这公式我个人认为不太实用,毕竟SPI通信,尽量还是用那几个经典的波特率,下面的这张表,这比上面这公式实用的多。

接着,引脚的选择,datasheet里面又给了张表,


这个SSN脚是从机可以把这个映射到外设,但是主机就不用拘于这个引脚,因为



它说主机需要自己选择SSN脚,用GPIO模式,软件控制。所以任意GPIO脚都行。

接着重头戏来了。CC2530作为主机时候的发送比较简单,只用配置好后,像UXBUFF里面写入数据,这时它就会自动发送,这时,只用一直读取UxCSR.TX_BYTE位就行,当它为1时就发送完成了。

void SPI_Write(unsigned char Command)  

{  

  U1DBUF = Command;   

  while (!(U1CSR&0x02)){} //等待发送完成  

  U1CSR &= 0xFD;//复位  

 }

<span style="font-family:Microsoft YaHei;font-size:18px;">void SPI_Write(unsigned char Command)
{

  U1DBUF = Command; 
  while (!(U1CSR&0x02)){} //等待发送完成
  U1CSR &= 0xFD;//复位

}</span>


但是CC2530作为主机时候的接收就比较奇葩。因为它的设计机制实在是天马行空。它把UxBUFF变成了一个doubleBUFF,然后在发送的同时,它就开启了接收。

因为速率是匹配的,所以,发送完成的时候,接收也就完成了。所以,为了和正常的外设联调,当我们需要读取数据时,我们需要先向UxBUFF里面灌进数据,这样才能输出时钟,然后读的标志位是UxCSR.TX_BYTE,并不是UxCSR.RX_BYTE!!!




由上图可以知道,RX_BYTE只有在从机模式的时候才有效,TX_BYTE则在主机模式的时候才有效。
下面附上接收代码。
  1. unsigned char SPI_Read(void)  
  2. {  
  3.   U1DBUF = 0x00;//废数据,为了输出SCK时钟  
  4.   while (!(U1CSR&0x02)){} //等待发送完成  
  5.   U1CSR &= 0xFD;//复位  
  6.   unsigned char temp = U1DBUF;//读取UxBUFF时,硬件会自动清零  
  7.   return temp;  
  8. }
SPI(Serial Peripheral Interface)是一种全双工同步串行通信接口标准,在嵌入式系统中广泛应用于各种外设间的数据交换。对于SPI标准的理解通常聚焦在它的核心原理、配置选项、和基本的操作流程等方面,而“SPI_TypeDef转TI”这一表述似乎指向了两个层面的理解:一是SPI硬件组件的通用描述(SPI_TypeDef),二是TI(德州仪器)公司的产品或技术背景。下面,我们分别探讨这两个方面: ### SPI硬件组件 - SPI_TypeDef SPI硬件组件,即SPI_TypeDef,通常指的是一段存储器区域或结构体,包含了SPI控制器的所有配置寄存器和状态寄存器。这些寄存器允许程序员对SPI通信的各种属性进行配置,如时钟速率、数据顺序、数据传输的方向等等。SPI_TypeDef的用途在于提供了一种方便的方式来访问和修改SPI控制器的所有关键参数,使其成为开发人员进行SPI通信策略设计的核心工具。例如,在ARM微处理器环境下常见的STM32系列芯片中,SPI_TypeDef就是SPI控制器寄存器映射的一个例子。 ### TI产品的SPI实现 德州仪器(TI)作为全球知名的半导体制造商之一,拥有广泛的微控制器家族,其中许多成员都内置了SPI接口。这些SPI接口的实现虽然都遵循了SPI标准的基本原则,但在具体的功能特性和配置选项上可能会有所不同,以适应不同应用场景的需求。TI的产品往往在其官方文档中详细说明了SPI接口的配置、操作模式、以及与外部设备通信的示例代码。例如,在使用TI的CC26XX蓝牙低功耗微控制器时,其提供的SPI接口可用于连接其他传感器或外围设备,进行数据交换。 ### “SPI_TypeDef转TI”的含义 若理解为“从SPI_TypeDef到TI产品”,则可能是指开发者需要从理解标准化的SPI组件(SPI_TypeDef)出发,将其知识应用到特定TI产品的实际开发环境中。这就意味着除了掌握SPI基础理论之外,还需要熟悉TI所提供的硬件资源、开发环境、以及配套的SDK(Software Development Kit)。TI通常会提供详细的参考手册、例程、和在线教程,帮助开发者高效地利用其硬件资源进行创新设计。 --- ### 相关问题: 1. **如何配置SPI_TypeDef以实现高性能SPI通信?** - 关键因素包括时钟频率的选择、数据位宽、帧格式、以及中断配置等。正确的配置有助于优化通信速度和稳定性。 2. **在使用TI微控制器时,SPI与外部设备通信的最佳实践是什么?** - 包括但不限于初始化SPI接口、设置合适的波特率、使用适当的电源管理和抗噪声措施、以及错误处理机制。 3. **如何调试SPI通信中的问题?** - 这涉及到使用日志记录、观察通信波形、检查设备的状态位和错误标志等多种手段。良好的调试习惯能够快速定位问题根源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值