跳到主要内容

06_使用spidev操作SPI_DAC模块

参考资料:

  • 内核驱动:drivers/spi/spidev.c

  • 内核提供的测试程序:tools/spi/spidev_fdx.c

  • 内核文档:Documentation/spi/spidev

  • DAC芯片手册:TLC5615.pdf

1. 硬件

1.1 原理图

IMX6ULL:

image-20220309150927785

STM32MP157:

image-20220309151025637

原理图:

image-20220309151636533

1.2 连接

1.2.1 IMX6ULL

DAC模块接到IMX6ULL扩展板的SPI_A插座上:

image-20220309164031109

1.2.2 STM32MP157

2. DAC操作原理

2.1 内部框图

image-20220309155625021

操作过程为:

  • CS为低
  • 在SCLK的上升沿,从DIN采集16位数据,存入上图中的16-Bit Shift Register
  • 在CS的上升沿,把16-Bit Shift Register中的10位数据传入10-Bit DAC Register,作为模拟量在OUT引脚输出

注意

  • 传输的16位数据中,高4位是无意义的
  • 中间10位才被转换为模拟量
  • 最低2位必须是0

2.2 时序图

image-20220309160306094

使用SPI传输的细节:

  • SCLK初始电平为低
  • 使用16个SCLK周期来传输16位数据
  • 在SCLK上升沿读取DIN电平
  • 在SCLK上升沿发出DOUT信号
  • DOUT数据来自16-Bit Shift Register
    • 第1个数据是上次数据遗留下的LSB位
    • 其余15个数据来自16-Bit Shift Register的高15位
    • 16-Bit Shift Register的LSB在下一个周期的第1个时钟传输
    • LSB必定是0,所以当前的周期里读出16-Bit Shift Register的15位数据也足够了

2.3 DAC公式

image-20220309162256125

输出电压 = 2 * VREFIN * n / 1024 = 2 * 2.048 * n / 1024
其中: n为10位数值

3. 编写APP

源码在GIT仓库里,这2个位置里的源码是一样的:

image-20220310120532411

image-20220310120646206