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.

[参考译文] CCS/TM4C123GH6PM:有关 AD4001 ADC 的 SSI 帮助

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/586088/ccs-tm4c123gh6pm-ssi-help-with-ad4001-adc

器件型号:TM4C123GH6PM

工具/软件:Code Composer Studio

我的任务是以4kHz 的频率读取 AD4001 ADC (模拟器件)。  我似乎正在从 ADC 读取数据、但它不可靠。  是否有人对此器件有经验?

我将 TM4C123G Launchpad 连接到 ADC:

SSIOTX 为 NC

SSIORX 连接到 SDO 引脚

SSIOCLK 连接到 SCK 时钟引脚。

我使用 GPIO 来控制 CNV 引脚。

ADC 上的 SDI 被拉高至 VIO。

我正在查看示波器上的 SPI、在某些情况下、在时钟开始前线路上有数据?  

以下是代码片段:  

(初始化)

void SpiInit_SSI0 (void){

//必须启用 SSI0外设才能使用。

SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);

//对于 TM4C123G、SSI0与 Porta[5:2]一起使用。

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

//为端口 A2、A3、A4和 A5上的 SSI0功能配置引脚复用。

GPIOPinConfigure (GPIO_PA2_SSI0CLK);//为时钟配置 PA2

// GPIOPinConfigure (GPIO_PA3_SSI0FSS);//将 GPIO 用于*CS 函数。

GPIOPinConfigure (GPIO_PA4_SSI0RX);//为主机接收配置 PA4

GPIOPinConfigure (GPIO_PA5_SSI0TX);//为主机发送配置 PA5

GPIOPinTypeGPIOOutput (GPIO_Porta_base、GPIO_PIN_3);//将 PA3配置为* CS 的 GPIO

//配置 SSI 引脚的 GPIO 设置。 该函数也会提供

将这些引脚的//控制到 SSI 硬件。 请参阅中的数据表

//查看每个引脚分配的函数。

//引脚分配如下:

// PA5 - SSI0Tx

// PA4 - SSI0Rx

// PA3 - SSI0Fss -未使用

// PA2 - SSI0CLK

GPIOPinTypeSSI (GPIO_Porta_base、GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_2);

GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_3、0);//为*CS 启用 GPIO 引脚

//为 SPI 主控模式配置和启用 SSI 端口。 使用 SSI0、

//系统时钟电源,空闲时钟低电平和低电平有效时钟输入

//飞思卡尔 SPI 模式、主控模式、1MHz SSI 频率和8位数据。

//对于 SPI 模式,可以设置 SSI 时钟的极性

//单元空闲。 您还可以配置所需的时钟边沿

//在上捕获数据。 有关的更多信息、请参阅数据表

//不同的 SPI 模式。

SSIConfigSetExpClk (SSI0_BASE、8000000、SSI_FRF_MOTO_MODE_0、

SSI_MODE_MASTER、20000000、16);

//启用 SSI0模块。

SSIEnable (SSI0_BASE);

uint32_t pui32DataRx[2];

//从 SSI 端口读取任何当前数据。 这将确保接收

// FIFO 为空,因此我们不会读取任何不需要的垃圾。 这在这里完成

//因为 SPI SSI 模式为全双工模式,允许您发送和

//同时接收。 SSIDataGetNonBlocking 函数返回

//返回数据时为"true",未返回数据时为"false"。

//“非阻塞”函数检查接收中是否有数据

// FIFO、如果没有、则不会"挂起"。

while (SSIDataGetNonBlocking (SSI0_BASE、&pui32DataRx[0])){}

GPIO_PORta_data_R |= 0xFF;

SysCtlDelay (4);

GPIO_Porta_DATA_R &= 0xF7;

SSIDataPut (argSsiBase、0x1400);//0x1406);//pui32DataTx[ui32Index]);

//等待 SSI0完成传输发送 FIFO 中的所有数据。

// while (SSIBusy (argSsiBase)){}

uint32_t data = 0xCCCCCCCCCC;

SSIDataGet (argSsiBase、&data);

// while (SSIBusy (argSsiBase)){}

返回 convertToVoltage ((int16_t)(data & 0xFFFF));

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Brian、
    那么、您是否在 AD4001上使用了3线制无忙指示器? 我认为您不应该称之为"SSIDataPut "。 我想您正在丢失结果、并且它不会写入 AD4001 (SSI0TX 未连接)。 注释掉该行。

    一个建议是让您的帖子更易阅读、选择"使用富格式"、然后使用" "按钮。 然后、它会保留缩进级别并执行 C 颜色格式化。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想了同样的东西,我尝试了。 我从未在示波器上看到过传输。 它只是在 SSIDataGet 调用中挂起。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否有办法在不首先写入 SSI 接口的情况下启动传输?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉,我以为作为一名师父,会启动转接,但你说得对。 SSIDataPut ()执行传输,SSIDataGet ()则仅返回接收 FIFO 中的值。 (我的图像是专家:()

    数据会传输多少数据? 它是仅在低位关闭、还是完全随机关闭?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不幸的是完全随机。 我将输入短接在一起、预期结果为0、我将看到从-1.2到+3.9的任何位置
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Brian、
    我收到了客户支持发送的一封电子邮件、其中包含我认为您提供的以下信息:

    问题:负责在现有产品中实施模拟器件 AD4001高速 SPI ADC。 使用 TM4C123G Launchpad 对系统进行原型设计。 与模拟器件广泛接触后、得出结论:SPI 接口的时序/帧不正确。
    我有一个 GPIO 连接到 ADC 的转换引脚。
    SSI0Rx 连接到 ADC 上的 SDO 线路
    SSI0CLK 连接到 ADC 上的 SCL 线路。
    ADC 上的 SDI 连接到 Vcc。 (三线模式)
    我正在使用 Tivaware SSI 库。
    ADC 和 Tiva 之间有通信、但在示波器上查看时序表明、CVN 引脚变为低电平和 SPI 接口上启动的时钟之间的延迟太长。 我们不会向 ADC 写入任何内容、但我可以启动事务的唯一方法是在读取前执行写操作。]

    您能否共享示波器图片? 从转换为低电平到模拟器件规范允许的第一个 SSI0CLK 边沿的最长时间是多少?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../DataValid.pdf

    我刚才捕获了这个图像。  Tiva 看起来正读取 ADC 在线路上放置的内容。

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

    从模拟器件规格来看、我看不到从转换为低电平到 SPICLK 开始的任何最大时间规格。

    也就是说、如果我找到合适的数据表:

    http://www.analogue.com/media/en/technical-documentation/data-sheets/AD4001.pdf

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

    Bob Crosby 说:
    我收到了客户支持部门的电子邮件,其中包含我假设您提供的以下信息:

    Bob -即使是一个简单的外部人员也必须"记住"您为支持此海报所做的巨大努力。  简直太棒了

    您已全面有效地涵盖 TM4C 行为的所有相关方面此问题的大部分涉及"其他供应商"器件-这不应成为"您的"责任!

    过去曾参与过类似的工作----在这一工作中,我们被要求"支持一切"----我"知道","如此广泛地开放论坛大门"将会引起这种问题。  除了此海报-谁真正受益于这场(特定)斗争?  还有(许多)其他人正在寻求真正的 TM4C 指导-当"主要供应商支持代理"被迫离开其重点专业知识领域时、他们是否会受到影响-尤其是当涉及非供应商/非 MCU 器件时?

    此论坛是否注定要支持所有供应商提供的"每种器件"-未来很长的时间?   这是一个(非常)滑的斜坡-具有可预测(负面)结果-(原谅)似乎没有得到充分考虑!

    "客户支持"认为有必要与您联系、甚至"在您为这张海报所做的一切之后"、这一事实就像"不公平和误导!"  如果有用-我很高兴联系他们并告知您的努力的深度和响应性-这一点尤其值得注意、因为当前的问题(主要)涉及另一家供应商的器件!   可以看到"客户支持"引发了此问题-现在对他们(不幸的)创造"视而不见/否认"...

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

    相信这条线索中没有关键事实(仍然存在)。  列出的是(可能)会导致此非供应商器件成功的器件!

    • 此 ADC 很复杂-需要"顶晶" PCB 设计-未注明电路板设计海报是否已实现!  供应商的评估板是理想的-尤其是在开发过程中。
    • 先前恢复的数据被认为"不可靠"。   (提供很少的诊断值) 今天、我们获得了单个示波器捕获-没有此数据的"可靠性!"报告
    • 该 ADC 的重复访问揭示了什么?
    • 之前有人指出、ADC 输入"短路"。  我不确定这是否适合此类器件-此类器件寻求真正的"差分"信号输入。  "在范围内"的正确、已知的差分信号输入是否会远优于此?
    • 是否存在其他这样的"ADC 板"-它们是否已经过测试?
    • 功率和功率分配是否适用于此类16位 ADC?  在此测试/验证期间是否移除了任何/所有"噪声源"?

    在您的初始帖子中、您注意到"由 SPI 时钟的 ADC (提前)输出数据!"  感谢供应商 Bob 对 AD 规范的介绍-我今天也看到了这一点-但供应商却注意到、SPI 数据列车的 MSbit "呈现/显示"带有"CNV"的下降-然后持续-直到第一个 SPI 时钟到达。  只有这样-才会执行"正常/习惯 SPI 时钟提前数据!"  (至少可以说很奇怪...)  您注意到、" SPI 数据过早到达"是"偶然"-根据我的阅读、它是"始终!"  (如果 "偶尔"证明是真的、则可能会发出一些错误信号...)

    可能有更多的"感兴趣的项目"、但付出了大量努力、这些事实(可能有助于解决)尚未提交...

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

    我对上一篇帖子有点冒犯。  在计划紧张且资源有限的现实世界中、当某些事情不起作用时、采取多路径方法来降低风险并不罕见。 模拟器件为我们的支持请求提供了一名专用的应用工程师。  该工程师向我提供了他的电子邮件和直拨电话号码(以及他旅行时的手机号码)。  我向客户支持发送了一封电子邮件、希望收到 TI 的类似回复。  但是、这一"支持论坛"似乎确实只是经验丰富的用户向我们的用户进行 bash、让他们尝试学习的地方。  

    Bob、感谢您的回答。  我非常确信 Tiva 正在读取 ADC 在线路上放置的内容。  Lockheed 管理层也希望我让应用工程师"挂机"在 TI 一侧、因此我们会向客户支持发送电子邮件。

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

    "今天的事实"都不是过去提出的-事实上、AD 的支持团队应该一直深入参与-我的书面(可能)已经被澄清了这些事实。   你写了 一篇“bashing”的文章——但我曾参加过(两个)工程和法律学校——请问你是在哪里/如何被打的?  (我们接受了"避免"此类收费的培训-但我们要说明一点)  您是否"误解"了我对本论坛的关注/关注?   

    您未能提及我提供的(详细)技术指导(4月6日、23:06)-这使另一家公司能够凭借"该设备"取得成功!  (这是否会降低您的"犯罪"意识?)  AS (如果不是这里的长期论坛用户)我觉得有责任"保护论坛"-作为外部人员-我的(较小但仍然适当)"PC 约束"能够识别潜在的破坏性论坛移动。

    如果此类"技术"的大部分成员都不能成功(也不可能继续)。 请求"目标"非供应商"设备。  您避免承认这一事实(出于明显的原因)-您不承认吗?

    我们对您对(相关)技术的回应并不满意。 先前代表您提出的问题(4月6日、23:06) -所有这些问题都是为了"满足您的严格日程"、通过雇用"外部人员"来增加"有限资源"。  您的"犯罪"感可能不恰当(并身份不明)。

    我们的客户在大约18个月前就使用了该 ADC。  MCU 是(另一个) Cortex M4 -我把它们弄乱了、以获得进一步的指导。 (他们在"菊花链"中使用了多个此类器件-我的公司帮助他们取得了成功。)

    以下是 Bob 提供的 AD 数据表的直接报价:
    "必须注意的是、差分输入信号必须具有真正的反相性质、即180°相位差、这是将输入信号的共模电压保持在表1中所示的 VREF/2附近的指定范围内所必需的。"

    我相信您提供具有此类(指定)输入信号的 ADC 符合您的最佳利益。  (超越您(之前)列出的"容易"方法) 应该注意到、Lockheed (以及类似的其他人)是我公司的(满意)客户...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Brian、
    没问题。 我理解您的立场。 我始终不会将"另一"芯片快速作为问题。 我完全理解在两个供应商之间相互指责的沮丧情绪。 但是、在本例中、我没有看到任何 TM4C 行为的问题。 我还了解管理层如何通过强制升级来"帮助"。 我已经足够长时间了、这不会冒犯我。

    现在到了实际的点。 我们如何使其正常工作? 我已向您发送了一个朋友请求、以便您可以直接与我联系。 如果您认为有问题、我们可以使用 Analog Devices 召开三方电话会议。

    另外、您可能会考虑 CB1的建议、并尝试将差分引脚偏置到 GND、VREF 或中间的某个位置。 这两个引脚连接在一起并悬空可能会令人不满意。 但在这方面、我将由模拟器件工程师负责。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bob -感谢您的支持、"信任投票"。  此类"快速/脏"实施(输入短路/悬空)-尤其是在应用于要求苛刻的器件时-会引起高风险因素。

    我们(仍然)对海报的 ADC 板"什么也不知道"!  如果器件过于复杂、布局不当、组件选择/定位不当或布线不会成功。

    先前提出的问题(4月6日,23时06分)"旨在提供协助"----和(仍然)未回答...  (提供正确的电路板设计时、我们知道器件可以正常工作!)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    根据 AD 应用工程师的建议、ADC 输入引脚连接在一起并保持悬空。 我把它们都绑在地上,他建议不要这样做,而是把它们短在一起。

    我与您的联系不是要对 ADC 本身进行分类、而是要确定我的 SSI 实现的有效性。 同时、我还收到了其他具有 SPI 接口的组件、它们都能可靠运行。 我知道 ADC 可以工作、我已经在其他程序中使用过它们。 但是、其他使用 SOC 的程序和 ADC 以极高的速度与 FPGA 进行连接、并将数据放置在环形缓冲器中、因此 ARM 可以在需要时获取数据。 我从未实施过来自 Tiva 的高速 SPI ADC、这正是我需要帮助/验证的地方。 模拟人员正在实际转换方面工作。
    顺便说一下、我不是在4kHz 采样点、每15-20个样本中有无效数据。 因此、我相信 SSI 接口是良好的。 再次感谢您的帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果您达到14/15和/或19/20 "有效样片"、则会显示"您的成功之道!" 好的。
    您是否可以确认您的是(AD 评估板)还是由您的技术团队"专业设计"的评估板(可能是您以前的评估板之一)?   电路板实施是关键/关键...

    我对您的 ADC 输入的处理情况仍然(不确定)。  我们希望您通过"适当"的差分信号输入获得的"有效"样本-正如 AD 数据表所指示的...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    与 AD 支持配合使用时、转换信号下降沿和 SPI 读取开始之间的时序大约关闭10ns。 我现在在8k 时采样100%精度(根据我的要求进行2倍过采样)。
    该板是在内部设计和构建的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Brian Savage"]……转换信号下降沿和 SPI 读取开始之间的时间大约为10ns。

    Bob 和我都(单独)搜索了该规格-我们都找不到。

    我在阅读数据时注意到、MSbit (立即呈现)发生在" CNV 下降"时-不考虑(任何)"第一/初始"SPI 时钟。  (您的示波器捕获结果表明了这一点!)

    如果方便-您是否可以注意到特定时序规格出现在何处?  (我们假设"SPI 读取"是指"第一个 SPI 时钟的到达"。)  (即 CNV 下降沿和 SPI 时钟到达之间的时间差) 是否正确?

    也许对您有益-我们建议客户"设计/构建"以实现未来扩展-不久他们又添加了另一个 AD4001 -感谢我们的帮助、"抢先"。

    恭喜您进行电路板设计-我们实施了此类电路板(高达20位)、并且(很少)"第一轮"电路板的性能达到预期。  (为细节扫汗-(非常)非常必要)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    该规范来自 AD 支持。 CNV 线上的最小值为320ns、然后在 SPI 时钟的第一个上升沿前的最小值为10ns。

    此设计需要 ADC 的速度、而不是精度(我实际上只需要16位中的14位)。 下一步是 PCB (我现在在一个经过精心构建的焊接板上)。 由于焊接板上的所有组件都在工作、因此我们期望它在 PCB 上能够获得更好的(精度)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    BTW、这是第3轮。 我的工作台抽屉中有一堆废板。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Brian Savage">该规范来自 AD 支持。 CNV 线路上的最小值为320ns、然后在 SPI 时钟的第一个上升沿前的最小值为10ns。[/quot]

    谢谢-谢谢。  这说明了 Bob、I (和所有其他人)找不到该数据的原因!

    我在您的"S 列表"上有进一步上升(甚至)的风险-但我们应该注意、由于您的 MCU 提供 CNV 信号-您的"MCU 在降低 CNV 后、是否(极)不太可能比10ns 内的速度更快地驱动 SPI 时钟?"  (如果 IRC -该供应商的 MCU 在"PUT"命令后驱动 SPI 时钟(和数据)-该命令必须遵循"GPIO 的 CNV FALL "。)  我无法想象在10ns 的"窗口!"中会发生这种情况  不是很近!

    因此-您的问题必须是由于违反320nS CNV (最小值)而导致的。   (不确定具体指定或测量的方式/位置。)

    我(AM)尝试在这里具有一些价值-这些时序项目-正如我已经确定和介绍的-请提出疑虑...