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.

[参考译文] TM4C123GH6PM:KSZ8795CLX SPI 读取问题

Guru**** 2393025 points
Other Parts Discussed in Thread: TM4C123GH6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1513060/tm4c123gh6pm-ksz8795clx-spi-reading-problem

器件型号:TM4C123GH6PM

工具/软件:

尊敬的社区成员:

我们想使用 tm4c123gh6pm 和 SPI 来读取 KSZ8795CLX 以太网交换机的0x00寄存器。

我们预计从 KSZ8795CLX 的0x00寄存器获得0x87的值。

我们 发送0x03 (SPI 读取数据命令)、0x00 (寄存器地址)和4个虚拟字节、同时接收4个字节。

但是、我们尚未设法从寄存器中获取任何有意义的数据。 系统时钟、初始化和读取函数以及逻辑分析仪屏幕截图如下所示:

我们如何解决这个问题?

系统时钟:

SysCtlClockSet (SysCtl_SYSDIV_10 | SysCtl_USE_PLL | SysCtl_OSC_MAIN | SysCtl_XTAL_16MHz);

初始化函数:

//启用 SSI0外设
SysCtlPeripheralEnable (SYSCTL_PERIPH_SSI0);

//启用 GPIO 端口 A
SysCtlPeripheralEnable (SysCtl_Periph_GPIOA);

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

GPIOPinConfigure (GPIO_PA2_SSI0CLK);

GPIOPinConfigure (GPIO_PA3_SSI0FSS);

GPIOPinConfigure (GPIO_PA4_SSI0RX);

GPIOPinConfigure (GPIO_PA5_SSI0TX);

//配置 SSI 引脚的 GPIO 设置
GPIOPinTypeSSI (GPIO_PORTA_BASE、GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 |GPIO_PIN_2);

//为 SPI 主模式配置和启用 SSI 端口
SSIConfigSetExpClk (SSI0_BASE、SysCtlClockGet ()、SSI_FRF_MOTO_MODE_1、SSI_MODE_MASTER、1000000 8);

//启用 SSI0模块
SSIEnable (SSI0_BASE);

读取功能:

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

}

SSIDataPut (SSI0_BASE、0x03);
SSIDataPut (SSI0_BASE、0x00);

针对(ui32Index = 0;ui32Index < 4;ui32Index++)

SSIDataPut (SSI0_BASE、0x00);
SSIDataGet (SSI0_BASE、&pui32DataRx[ui32Index]);
}

非常感谢。

此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Unknown 说:
    我们 发送0x03 (SPI 读取数据命令)、0x00 (寄存器地址)和4个虚拟字节、同时接收4个字节。
    [quote userid="516514" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1513060/tm4c123gh6pm-ksz8795clx-spi-reading-problem

    t

    [/报价]

    该波形通过放置0x3后跟五个0x0完全符合您预期的操作。 但是、从设备(您的 KSZ)未返回数据。 您将需要调查 KSZ 不返回数据的原因。 据我所知、主器件工作正常、如 MOSI 所示。 而 MISO 线只是平坦的。  

    我注意到 KSZ 在下降沿输出其数据。 如果是这种情况、为什么您使用  SSI_FRF_MOTO_MODE_1而不是 SSI_FRF_MOTO_MODE_0 ?  在 SSI_FRF_MOTO_MODE_1中、MOSI 会在上升沿输出、但从器件也使用上升沿对不会有足够设置时间的数据进行采样。 在任何情况下、您都需要查看 KSZ 数据表以了解所需的时序、因为我不是此第三方 IC 的专家。  

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

    感谢您的回答。  

    我们使用  SSI_FRF_MOTO_MODE_1的原因是在模式0和2中、时钟不是连续的。 但是、在模式1和模式3中、时钟是连续的。

    此外、我们还尝试了 mode0、mode2和 mode3。 然而、我们尚未能够获得任何有意义的数据。 您可以在下面看到日志文件。

    模式0:

    模式2:

    模式3:

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

    您好、

     您能否咨询  KSZ8795CLX 供应商并让他们提供建议查看哪些内容? 您已经尝试了所有不同的模式、它们都从从器件返回0。 这不是我能帮助的东西。 从主的角度来看、它的行为符合预期。 我认为 KSZ8795CLX 供应商将能够更好地帮助您。  

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

    您好、

    我会做这个。 我刚刚写信给取消您关于模式的问题。

    非常感谢。

    此致。