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.
工具与软件:
尊敬的 TI 支持团队:
我正在处理一个涉及将 DP83869以太网 PHY 与 MSP432P401R LaunchPad 连接的项目。 我在尝试读取 PHY 地址(始终接收"FFFFFFFF"作为输出)时遇到问题。 以下是我的设置和到目前为止已执行的步骤的详细信息:
硬件配置:
连接:
软件配置:
问题描述:
采取的步骤:
具体问题:
其他信息:
在这里、我 提供了我的代码供您参考。
#include "ti/devices/msp432p4xx/inc/msp.h"
#include "ti/devices/msp432p4xx/inc/msp432p401r.h"
#include "ti/devices/msp432p4xx/inc/msp.h"
#include "ti/devices/msp432p4xx/driverlib/driverlib.h"
#include
#include
#include
#include
#include
#include
#include
#include "ti_drivers_config.h"
#include "ti/devices/msp432p4xx/driverlib/gpio.h"
#define MDC_PIN BIT6 // P2.6
#define MDIO_PIN BIT7 // P2.7
#define GPIO_PORT GPIO_PORT_P2
int PhyReadData = 0;
/*
*==== main ====
*/
void SysTick_DELAY (uint32_t DELAY_ms){
uint32_t delay_cycles =(3000000 / 1000)* delay_ms;
SysTick -> load = delay_cycles - 1;
SysTick -> VAL = 0;
SysTick -> CTRL = SysTick CTRL_CLKSOURCE_MSK | SysTick CTRL_ENABLE_MSK;
while (((SysTick -> CTRL 和 SysTick _CTRL_COUNTFLAG_MSK)= 0);
SysTick -> CTRL = 0;
}
void mdcPulse (){
GPIO_setOutputHighOnPin (GPIO_PORT、MDC_PIN);
SysTick_DELAY (100);
GPIO_setOutputLowOnPin (GPIO_PORT、MDC_PIN);
SysTick_DELAY (100);
}
void writeMDIOBit (int bit){
if (位){
GPIO_setAsOutputPin (GPIO_PORT、MDIO_PIN);
GPIO_setOutputHighOnPin (GPIO_PORT、MDIO_PIN);
其他{
GPIO_setAsOutputPin (GPIO_PORT、MDIO_PIN);
GPIO_setOutputLowOnPin (GPIO_PORT、MDIO_PIN);
}
mdcPulse ();
}
int readMDIOBIT(){
INT 位;
GPIO_setAsInputPin (GPIO_PORT、MDIO_PIN);
mdcPulse ();
位= GPIO_getInputPinValue (GPIO_PORT、MDIO_PIN);
返回位;
}
void writePHYRegister (int phyAddr、int regAddr、int data){
内部 I;
对于(I = 0;I < 32;I++) writeMDIOBit (1);//前导码
writeMDIOBIT(0);
writeMDIOBIT(1);
writeMDIOBIT(0);
writeMDIOBIT(1);
对于(i = 4;i >= 0;i-) writeMDIOBit ((phyAddr >> i)& 0x01);
对于(i = 4;i >= 0;i-) writeMDIOBit ((regAddr >> i)& 0x01);
writeMDIOBIT(1);
writeMDIOBIT(0);
对于(i = 15;i >= 0;i-) writeMDIOBit ((data >> i)& 0x01);
}
int readPHYRegister (int phyAddr、int regAddr){
内部 I;
对于(I = 0;I < 32;I++) writeMDIOBit (1);//前导码
writeMDIOBIT(0);
writeMDIOBIT(1);
writeMDIOBIT(1);
writeMDIOBIT(0);
对于(i = 4;i >= 0;i-) writeMDIOBit ((phyAddr >> i)& 0x01);
对于(i = 4;i >= 0;i-) writeMDIOBit ((regAddr >> i)& 0x01);
writeMDIOBIT(1);
writeMDIOBIT(0);
for (i = 15; i >= 0; i -){
PhyReadData <<= 1;
PhyReadData |= readMDIOBIT();
}
返回 PhyReadData;
}
int main (void)
{
字符输入;
const char echoPrompt[]="欢迎使用 Pod TCIM DE TEST:\r\n";
UART_Handle UART;
UART_Params uartParams;
board_init();
NoRTOS_START();
GPIO_init ();
uart_init();
GPIO_setConfig (CONFIG_GPIO_LED_0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_ON);
UART_Params_init (&uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_RETURN_FULL;
uartParams.readEcho = uart_echo_off;
uartParams.baudrate = 115200;
UART = UART_OPEN (CONFIG_UART_0、&uartParams);
if (UART == NULL){
while (1);
}
UART_write (UART、echoPrompt、sizeof (echoPrompt));
WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD;
GPIO_setAsOutputPin (GPIO_PORT、MDC_PIN);
GPIO_setAsInputPin (GPIO_PORT、MDIO_PIN);
GPIO_setOutputHighOnPin (GPIO_PORT、MDC_PIN);
// writePHYRegister (0、0x00、0x8000);//复位 PHY (假设 PHY 地址0)
int phyID1 = readPHYRegister (0、0x31);//读取 PHYIDR1
int phyID2 = readPHYRegister (0、0x31);//读取 PHYIDR2
char phyID1_str[10];
char phyID2_str[10];
snprintf (phyID1_str、10、"%x\n"、phyID1);
snprintf (phyID2_str、10、"%x\n"、phyID2);
uart_write (uart、(const uint8_t*) phyID1_str、sizeof (phyID1_str));
uart_write (uart、(const uint8_t*) phyID2_str、sizeof (phyID2_str));
printf ("\nPhyID1:%x\nPhyID2:%x\n"、phyID1、phyID2);
返回0;
}
感谢您的帮助。 我期待得到你关于解决这个问题的指导。
您好!
请注意、MSP432P 是 EOL 器件。 您甚至无法在 TI.com 上找到此器件。 我将建议您查看替代 MCU、例如 TM4C123/TM4C129 MCU。 就您的代码所呈现的内容而言、您似乎是在为 MDIO/MDC 使用某种位绑定方法。 您在哪里获得了 writeMDIOBit、 writePHYRegister 和 readPHYRegister。 尽管 MSP432P SDK 已停产、但我认为它不会提供这些功能。 如果这些是您从 DP83869获得的功能、我会建议您联系相应论坛小组的专家以获得支持、或者我可以转移您的帖子。
您好!
我从互联网上获取这些函数并使用位拆裂方法来读写 PHY
抱歉、我不支持您的互联网代码。 我建议您查看示波器或逻辑分析仪上 MDIO 和 MDC 信号的波形。 将您的信号与参考 MDC/MDIO 波形进行比较。 Wikipedia 有一个简单的示例波形。 请见 https://en.wikipedia.org/wiki/Management_Data_Input /输出。如果您进行一些搜索、您当然可以在线上找到更多示例波形。 从基础知识开始。 您是否甚至看到有任何来自 P2.6和 P2.7的信号? 也许、从一个简单的方法开始、您甚至可以切换 P2.6和 P2.7以生成方波吗? 这是为了确保正确初始化器件、以便从开始。