This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] ADS7066:设置 SPI 通信库

Guru**** 2434570 points
Other Parts Discussed in Thread: ADS7066

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1438660/ads7066-setting-up-spi-communication-library

器件型号:ADS7066

工具与软件:

大家好、我正尝试设置一个软件库、以便能够通过 ADC 上的通道与输入进行通信和读取。 我曾尝试参考 TI 提供的补充代码来设置它、但遇到一些错误、无法与之通信。 由于我对使用 SPI 通信协议非常陌生、我需要做些什么来确保我可以与它进行通信、或者我如何修改提供的示例代码以使其正常工作? 非常感谢您提供的任何建议或指导!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Sumayyah! 欢迎来到 TI E2E 论坛!

     

    感谢您的提问! 如果您不熟悉 SPI 协议、我还建议观看我们的高精度实验室视频/培训之一、我们有 SPI 通信基础知识、可能会有所帮助。  

     

    我很抱歉耽误了时间,我在旅行,不能更快地回应。

     

    介绍 ADS7066的一些 SPI 基础知识

                   SPI 配置

    SPI 通常是一个4线系统、它需要时钟(SCLK)、片选(CS)、SDI (串行数据输入)和 SDO (串行数据输出)。   有些器件可以采用略有不同的配置、例如3线、增强等。但对于 ADS7066、我们将仅使用4线。   使用 SPI 的器件之间的通信通常拆分为帧、CS 切换将启动该帧并将其另一端。 在该帧期间、SCLK 应具有足够的时钟周期来发送/接收完整的数据包。 对于 ADS7066、它通常是24个时钟(有些模式需要不同数量的时钟、但需要注意的是这些时钟。  

    *要考虑的一个重要事项是确保主机(用于与 ADS7066通信的控制器)和外设(ADS7066)已正确连接。 控制器通常具有或可配置为具有相同的4线 SPI 线路。 这里需要确认的是通道匹配、SCLK 应转至 SCLK、CS 转至 CS、但对于 SDI 和 SDO、则相反。 由于控制器会输出数据来控制外设、因此控制器的 SDO 应连接到 ADS7066的 SDI。 与 SDI 相反、控制器将从 ADS7066读取数据、因此控制器 SDI 应连接到 ADS7066的 SDO。                

                   SPI 协议

                   SPI 通常需要考虑3个变量、以确保主机(控制器)和外设(在本例中为 ADS7066)正确发送和接收数据。 存在时钟极性(CPOL)、时钟相位(CPHA)和 CS。 时钟极性表示 SCLK 启动为低电平(CPOL = 0)并进行切换或启动为高电平(CPOL = 1)、然后进行切换。 时钟相位(CPHA)指定是在 SCLK 的前沿(如果 CPOL = 0、则为上升沿;如果 CPOL = 1、则为下降沿)还是在 SCLK 的后沿(如果 CPOL = 0、则为下降沿;如果 CPOL = 1、则为上升沿)(CPHA =1)读取数据。 对于芯片选择、需要考虑的是高电平触发器还是低电平触发器、通常可以通过以下方式显示:CS 顶部有一个条形图、如果 CS 不是触发高电平、则表示 CS 开始低电平、当 SPI 通信开始时变为高电平。 更常见的情况是 、将具有一个条形图、这意味着它会触发为低电平、因此 CS 将在通信开始时从高电平开始、然后变为低电平。 对于控制器和 ADS7066、这些配置需要进行设置和匹配。  

                   

     

    要考虑的一些更具体的 ADS766 SPI 通信内容是:

                   向寄存器写入

                   大多数 ADC 都有寄存器映射、可用于配置器件无效模式。 此映射通常可在数据表末尾找到。 寄存器映射通常有多个寄存器、每个寄存器具有不同的地址和默认/复位/偏移值(这将在寄存器映射中显示)、寄存器大小通常取决于器件、对于 ADS7066、每个寄存器的长度为8位。  在每个寄存器中通常可以找到多种配置、每个配置的大小可以是从1位到完整寄存器(8位)的任何范围。

                   要写入寄存器、需要遵循如下所示的特定格式:

                   前8位将启用写入寄存器操作、接下来的8位用于寄存器地址、最后8位用于配置寄存器。

     

                   对寄存器进行读取

                   从寄存器读取将需要2个帧、第1个帧将允许您要从中读取的器件、第2个帧将从 SDO 读取数据。

                   在第二个帧中、它可以全部为00s、也可以是一个附加命令(寄存器读取/写入)。

     

                   读取 ADC 数据

                   通常、在 SPI 上写入 NOP (全为0)将在 SDO 上输出最后配置的 ADC 通道的 ADC 数据。 该器件具有多个通道和选项、可配置每个通道和数据收集模式。 通道可以是通用输入/输出(GPIO)的模拟输入、数据收集模式可以是手动模式、自动定序模式或动态模式。 请阅读数据表、了解有关这方面的更多信息。 一般想法是应首先配置您要读取的通道、然后后续 NOP 命令将在 SDO 上输出 ADC 数据(某些模式将需要您等待2帧来在 SDO 上获取数据、但该模式的说明中会说明这一点)。

                   示例代码

    它提供的是一种基本格式、负责配置上述所有功能

    "ads7066.h"是一个包含寄存器映射的头文件、因此每次可以更轻松地写入每个寄存器内的特定配置、而不是整个寄存器。

     

    在"ads7066.c"内、大部分配置/可用性都位于这里。  命令的命名旨在使其更加直观、例如"ReadData"、"readSingleReger"、"writeSingleRegister"、"setRegisterBits"。 "initADS7066"、"startManualConversions"等

    如果您对 SPI、器件配置或示例代码有更多具体问题、敬请告知。

     

    此致、

    Yolanda