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.

[参考译文] LMH6517:LMH6517 SPI 运行故障

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

https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum/960960/lmh6517-lmh6517-spi-operation-trouble

器件型号:LMH6517

您好!

我将 LM6517放在自己设计的电路板上,SPI 读写不起作用。 我在 SPI 中配置了芯片、MOD0接地、MOD1悬空。 我将原理图放在下面。 我最初在一些数字输入上有5V 电压、因此我使用了一个全新的电路板并用手切断了布线。

对于引脚1、我考虑了标记下方的大点。 这是引脚1的正确方向吗??? 是否有人可以发布芯片上放大的评估板的清晰图片???  我放置了 PCB 的图片。 我用红色标记了 SPI 信号名称。

数据表第22页上显示了将300 Ω 至2k Ω 电阻器上拉至3.3V。 我在 SDO 上放置一个1.8k 电阻器一次、作为下拉至接地、一次作为上拉至3.3V。 SDO 绝不会以任何方式驱动电阻器。

我临时将电路板插入具有完全 ARM 调试功能的 Cortex M0处理器的 Arduino M0 Pro。 我使用硬件 SPI。

我尝试发送几个不同的增益值。 我对变压器电路似乎短路了函数发生器不太有信心。 这将进入另一个帖子。

我尝试在模式0下使用1MHz 时钟发出读取命令。 我在读取时降低 CS、发送0x80并再发送一次 x80作为虚拟字节。 接下来、我提出 CS。 LMH6517未驱动 SDO。 它保持高电平。 我附加了我的逻辑分析仪捕获和 Arduino 代码。 为了便于参考、我放置了 LMH617时序相关数据表的截图。

是否有人发现了问题?

 

 

 

#include 

#include 
#include 

const int slaveSelectPinLmh6517 = 8;
const int slaveSelectPinAD9958 = 5;

void lmh6517RegularRead (){
volatile uint8_t instruction = B10000000;/*读取通道0*/
volatile uint8_t value1;void Write

(slaveSelect1

)、L165*指令;mdelt1 (slumtSPI);low transfer
Value1 = spi.transfer (instruction);
delayMicroseconds (5);
digitalWrite (slaveSelectPinLmh6517、HIGH);
delayMicroseconds (10);

serial.print (instruction);
serial.print ('、');
serial.println (value1);
}

void lmh6517RegularWrite (uint8_t gainCode){
volatile uint8_t instruction = B00000000;//写入通道0*/

digitalWrite (slaveSelectPinlm6517、low

);delayCode (
SPI);deltransfer (rand.seconds);(SPI)
delayMicroseconds (5);
digitalWrite (slaveSelectPinLmh6517、HIGH);
delayMicroseconds (10);

}

void setup (){
Serial.begin(9600);
Serial.println ("start");
pinMode (slaveSelectPinAd9958、OUTPUT);
pinMode (slaveSelectPinLmh6517、 输出);

digitalWrite (slaveSelectPinAD9958、HIGH);
digitalWrite (slaveSelectPinLmh6517、HIGH);

SPI.begin();
SPI.setDataMode(SPI_MODE0;
SPI.setBitOrder (MSBFIRST);
SPI.setClockDivider(48);
}

void loop(){
lmh6517RegularWrite (0xF0);
lmh6517RegularRead ();

delayMicroseconds (200);
}

谢谢、

弗兰克

 

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

    您好 Frank、

     我将研究这个问题、并在明天返回给您。

    谢谢、
    Sima

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

    您好、Sima、

    感谢您对此进行深入研究。 我进行了更多测量。  LMH6517似乎卡在大约10的增益中。 我无法使其响应任何 SPI 命令来更改增益或关闭输出

    我使用了评估板的原理图来设计模拟输入。 我没有评估板。 我用 一个电路 TC4-1W+变压器在初级侧放置一个0.2Vpp 3MHz 信号。在初级侧、一侧为直流、另一侧为励磁。 在次级输出端、我在每个单端侧获得0.2Vpp、因此0.4Vpp 双端。 我已验证变压器的两个单端输出都是相反的极性。  我看到信号以10的内部增益通过 LMH6517传播。

    您是否有关于加电时增益和启用/禁用的默认值的信息??

    弗兰克

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

    在数据表的第4页的底部、显示了访问间隙:访问间串行芯片选择引脚必须被置为有效的最短时间。 这是什么??? 我刚才更改了我的代码。 在执行较低的 CS、传输字节、提升 CS 之后、我只添加了一个额外字节的虚拟传输。 这会在 CS 处于高电平时产生额外的时钟周期。 没有变化。

    弗兰克

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

    您好 Frank、

     我在查看您的问题和阅读产品数据表时随附了一份 Word 文档。 我对8个时钟周期的两个部分之间的差距有点困惑。 您能向我解释一下吗?  

     对于您的写入命令、似乎您获得了正确的增益值。 您将在最大增益下向 CHA 发送写入命令(在数据表的第3页上、最大增益约为22dB 或10V/V)、即数据表中的表3和表4所示的0x80。 对于读取命令、您发送的字格式不正确。 在这种情况下、您仍在以最大增益向 CHA 发送写入命令。 CS 是任何类型的命令(读取或写入)的断言。 如您正确操作的那样,您已在第一个 CLK 周期中将 CS 置为有效,然后在第16个周期后将其置为无效。 对于第二条命令、您必须等待三个 CLK 周期、然后才能再次将 CS 置为有效。 然后、这与之前的模式相同、但您可以在 SDI 上发送不同类型的命令。  

     作为测试、您是否能够以-9.5dB 或0.335 V/V 的最小增益向 CHA 发送写入命令:0xFE。 等待三个 CLK 周期、然后将 CS 置为有效、然后向 CHA 发送读取命令:0x8080。  

     如果您对文档一词中的任何内容也有任何疑问、请告诉我。

    e2e.ti.com/.../LMH6517.docx

    谢谢、

    Sima

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

    您好、Sima、

    感谢您发送电子邮件。 TI 的所有人都非常乐于助人。

    我取得了一些进展。 我没有进行读操作。 我还有其他一些问题要问。 我将在该消息的底部返回到该消息。

     写入

    我设法写入通道0。 我未使其与数据表中提供的命令字段位一同工作。 我通过在命令字段中发送0x10使写入工作。 它似乎也适用于发送0x30、0x50以及0x70。 我无法使对通道0的写入在命令字段中与0x00一同工作。 该命令字段的行为似乎与写入 LMH6517时想要 C7=LOW、C4=HIGH 的行为相同。

    1) 1)我发送16个时钟周期

    2) 2)降低 CS。

    3) 3)发送增益设置为16个时钟周期的0x10。

    4) 4)提升 CS。

    5) 5)发送16个时钟周期。

    写入操作似乎也可以在没有步骤1和5的情况下进行。

    >我对8个时钟周期的两个部分之间的差距有点困惑。 您能向我解释一下吗?  

    驱动程序仅在传输数据时发送时钟。 我最初使用的是8位传输。 在代码中、需要两次 C 函数调用来发送8位两次。 之间的间隔是函数调用之间的延时时间。 我尝试了16位传输、它产生几乎相同的结果、而 GAP 则更接近一点。

    我粘贴逻辑分析仪屏幕截图。

    我还在帖子底部插入了代码。

    为了找出有效的命令字段代码、我刚刚尝试了0x00至0xFF 之间的每个值、直到我看到 LMH6517接受增益。

     主机 IRQ

    >对于读取命令,您发送的字格式不正确。 在这种情况下、您仍在以最大增益向 CHA 发送写入命令。

    > CS 是任何类型的命令(读取或写入)的断言。 如您正确操作的那样,您已在第一个 CLK 周期中将 CS 置为有效,然后在第16个周期后将其置为无效。

    我不确定我是否明白你的说法。 您能否用我在第一个帖子中的屏幕截图中的时间索引对其进行重新表述? 我认为读操作是在时间指数49us 处进行的。 在这里、我为读取命令发送0x80。

    当您说“在这种情况下,您仍在以最大增益向 CHA 发送写入命令”时,这是在两个时间点之间的时间?

    谢谢、

    弗兰克

     

     

    #include 
    
    #include 
    #include 
    
    const int slaveSelectPinLmh6517 = 8;
    const int slaveSelectPinAD9958 = 4;
    
    
    
    void lmh6517BruteWrite(){
    volatile uint8_t instruction;
    volatile uint8_t instructionGain=0
    ;
    
    for (instruction = 0x10;instruction <= 0x70;instruction + instruction)
    for (gainCode = 128;gainCode <= 192;gainCode = gainCode + 32){
    serial.print ("指令:");
    serial.println (指令);
    serial.print (" gainCode:");
    serial.println (gainCode);
    
    
    spi.transfer16 (0xFFFF);//虚拟发送全1。 它会产生额外的时钟周期
    
    digitalWrite (slaveSelectPinLmh6517、low);
    delayMicroseconds (5);
    // spi.transfer (instruction);
    // spi.transfer (giCode);
    instructionGain =(指令<< 8)| gainCode;
    spi.transfer16 (instructionGain);
    delayMicroseconds (5);
    
    
    delayMicroseconds (5);
    
    digitalWrite (slaveSelectPinLmh6517、HIGH);
    delayMicroseconds (10);
    
    spi.transfer16 (0xFFFF);//虚拟发送全1。 它会产生额外的时钟周期
    延迟(2000);
    }
    }
    
    
    void setup(){
    Serial.begin(9600);
    Serial.println ("start");
    pinMode (slaveSelectPinAd9958, output);
    pinMode (slaveSelectPinlmh6517, 输出);
    
    digitalWrite (slaveSelectPinAD9958、HIGH);
    digitalWrite (slaveSelectPinLmh6517、HIGH);
    
    SPI.begin();
    SPI.setDataMode(SPI_MODE3);
    SPI.setBitOrder (MSBFIRST);
    SPI.setClockDivider(48);
    }
    
    uint8_t 增益= 0x80;
    
    void loop(){
    lmh6517BruteWrite();
    } 

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

    您好 Frank、

     通过格式化、可以在同一个字文档中为您的问题编写答案、这会更容易。 请查看标记为 Questions-2 (12/4)的部分。 红色标记的部分表示您是否可以尝试进行这些测试并报告您的发现。 如果您有任何疑问、请告诉我。

    谢谢!

    Sima  

    PDF 格式:

    e2e.ti.com/.../LMH6517.pdf

    作为 Word 文档:

    e2e.ti.com/.../5050.LMH6517.docx