标准硬件spi访问非标spi外设

1.写在前面

  最近有收到坛友发帖提问或者私信,关于硬件spi总线访问非标spi器件问题,根据以往使用经验归纳总结。

  spi(Serial Peripheral Interface)串行外设接口,嵌入式开发中最常用的接口之一,MCU、MPU都会提供硬件spi总线,甚至低端MCU都集成。对于无硬件spi总线,或者spi总线不够用时,也可以根据spi标准时序,使用普通GPIO模拟spi总线。

  一般CPU提供的spi接口,支持的是整字节访问,如8bit、16bit等。而非整字节的spi外设(芯片)也是很常见,哪怕是整字节的,很多厂家也是做得与标准spi外设有差别,估计是避开专利问题。而芯片原厂提供的Demo也大多是采用GPIO模拟spi。一般情况下,根据芯片手册说明及访问时序图,可以使用CPU集成的标准硬件spi访问,以提高速度和节约CPU资源。

2.常用非标spi外设

常见的非标spi外设是DAC、ADC,ADI的器件最常见。

【1】ADC,常用12bit、14bit、24bit,如AD7684、MCP3202。
【2】DAC,常用12bit、14bit、24bit。
【3】其他,电机芯片、IO扩展芯片、LED驱动芯片,如TMC2660。

3.硬件spi访问非标spi外设

  关于使用硬件spi总线访问非标spi外设,首先需要确认是否支持,然后下一步再是考虑如何实现;如果不确定,最好的方式就是尝试了。

【1】查看芯片手册
  一般芯片手册会有详细说明,如提到“兼容摩托罗拉spi标准”,则基本可以使用硬件spi访问。

【2】查看芯片特殊说明
   MCP3202使用标准spi访问说明。

MCP3202使ç¨è¯¦ç»æè¿°

   TMC2660使用标准spi访问说明,有明确描述,无效位可以自动忽略。


【3】分析芯片时序图
  如前面两步都没有明确说明,则分析时序图是最直接可靠的方法,可以根据时序图得出结论。以16bit ADC AD7684为例,虽然是整数字节,但从时序图分析得知也属于非标spi范畴。

AD7684æ¶åºå¾ 


【4】确定spi模式
  根据时序图确认spi控制模式,spi控制模式分为四类。
· send_then_recv,标准spi,常规操作,发送完一帧再接收,如读取某芯片寄存器的值;

· send_then_send,标准spi,常规操作,发送完一帧再发送,如向某芯片寄存器(地址)写入数据;

· send_recv,非标spi,具体看芯片时序图,产生时钟信号,发送完成的同时,也接收完成;第二种情况是,只接收,发送动作只是用来产生时钟信号,如一些AD芯片;

· spi_send,标准或非标spi都使用,只发送无返回值或者无须理会返回值,如spi LCD屏。

AD7684、MCP3202、TMC2660都属于第三种方式。

【4】忽略无效位
  使用硬件spi访问时,一般是整数字节,无效位手动忽略即可。如MCP3202为12bit ADC,我们以“三字节”时钟访问,需把高4bit忽略掉。

uint16_t  mcp3202_read(uint8_t mode)
{
    uint8_t send_buff[3],recv_buff[3];
    
    send_buff[0] = 0x01;
    send_buff[1] = mode;
    send_buff[2] = 0x00;
    spi_send_recv(&mcp3202_spi_dev,send_buff,recv_buff,3);
    
    return (((recv_buff[1] << 8) | recv_buff[2])&0x0fff);
}

【5】其他
  不排除一些CPU存在非整数字节配置的spi,如果有,则使用相关配置会来得更容易。

4.相关应用

[1] ADC AD7684
https://blog.csdn.net/qq_20553613/article/details/79043934

[2] ADC MCP3202
https://blog.csdn.net/qq_20553613/article/details/79132821

[3] 电机驱动TMC2660
https://blog.csdn.net/qq_20553613/article/details/80210813
--------------------- 
作者:Acuity- 
来源:CSDN 
原文:https://blog.csdn.net/qq_20553613/article/details/86619218 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值