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.

[参考译文] TM4C1290NCPDT:SSI 通信

Guru**** 2536750 points
Other Parts Discussed in Thread: TM4C1290NCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1042252/tm4c1290ncpdt-ssi-communication

器件型号:TM4C1290NCPDT

您好!

我使用的是 TM4C1290NCPDT 定制板。 使用  SSI2进行通信时、外部 EEPROM (M95040)读取/写入不起作用。

 MAP_SSIConfigSetExpClk (SSI2_base、ui32SysClock、SSI_FRF_MOTO_MODE_0、
SSI_MODE_MASTER、2000000、8);

使用手动芯片选择 PH0、 GPIOPinWrite (GPIO_Porth_BASE、GPIO_PIN_0、GPIO_PIN_0);是否需要每8位将芯片选择设为高电平?

读取总是为0、我注意到在读取指令和地址时钟之后没有生成。 原因可能是什么。

我在这里附加了信号以供参考。  

请帮帮我。

谢谢。

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

    您好!

     在读取期间、我看不到您的读取波形中数据字节的时钟。 您需要检查代码以确保它为数据再驱动8个 SPI 时钟。 请参阅下面 的 M95040时序图。

      

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

    您好!

    根据 TM4C1290数据表,读取需要一些虚拟数据传输,因此我们现在已经完成了,我们正在获取一些数据,但数据不一致。

     MAP_SSIDataPut (SSI2_base、0x00);//虚拟写入
    if (SSIDataGetNonBlocking (SSI2_base、&UDATA))

    *bptrReturnValue =(字节)(UDATA);
    bRetVal = 1;

    其他

    //虚拟位不为零,错误

    当虚拟写入时、我可以看到数据寄存器中的数据、但有时为0。任何时钟或所需的延迟问题。

    请帮帮我。

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

    您好!

     在读取前、请尝试先清除 RXFIFO。 请参阅以下说明。 这是为了确保 RXFIFO 为空、并且您不会读取任何不需要的垃圾。  

    //
    //从 SSI 端口读取任何残留数据。 这将确保接收
    // FIFO 为空,因此我们不会读取任何不需要的垃圾。 这在这里完成
    //因为 SPI SSI 模式为全双工模式,允许您发送和
    //同时接收。 SSIDataGetNonBlocking 函数返回
    //返回数据时为"true",未返回数据时为"false"。
    //“非阻塞”函数检查接收中是否有数据
    // FIFO、如果没有、则不会"挂起"。
    //
    while (SSIDataGetNonBlocking (SSI0_BASE、&pui32DataRx[0]))

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

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

    }我只使用相同的 API 来读取数据。它是否用于清除接收 FIFO?  

    无效
    SSIDataGet (uint32_t ui32Base、uint32_t * pu32Data)仅在环路等待期间才对上述 API 没有重大更改。

    请确认需要使用哪一个。

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

    我说的内容如下:

    while (SSIDataGetNonBlocking (SSI2_base、&pui32DataRx[0]));//添加此行以在 TX 线上输出虚拟数据之前清除 RXFIFO。

    MAP_SSIDataPut (SSI2_base、0x00);//虚拟写入
    if (SSIDataGetNonBlocking (SSI2_base、&UDATA))

    *bptrReturnValue =(字节)(UDATA);
    bRetVal = 1;

    其他

    //虚拟位不为零,错误