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.

tlk110驱动的问题

Other Parts Discussed in Thread: TLK110

各位:

    现在正在调试TLK110芯片,目前通过MDIO读取TLK110的PHY ID已经成功。读取的0x02值为0x2000,读取的0x03值为0xA211,按照这个值,应该说明通过mdio读取TLK110寄存器的值是正确的。

  目前的问题是写入TLK110寄存器的值失败,比如想将0x00寄存器写为0x3300,可是写入后,再次读出0x00寄存器值还是芯片复位后的初始值0x3100。参考tlk110的数据手册Page14页,有提到初始化的时候需要写入0x09、0x0A和0x0B寄存器。哪里可以查到详细的tlk110的寄存器配置值或者详细的参考代码。谢谢


0xA211
  • 您好,

    还请详细检查MDIO写入时序是否正确。

    MDIO是管理数据的输入输出双向接口,数据是与MDC时钟同步的。MDIO 的工作流程为:

    1、MDIO接口在没有传输数据的空闲状态(IDLE)数据线MDIO处于高阻状态。

    2、MDIO出现一个2bit的开始标识码(01)一个读/写操作开始

    3、MDIO出现一个2bit数据来标识是读操作(10)还是写操作(01)

    4、MDIO出现一个5bit数据标识PHY的地址

    5、MDIO出现一个5bit数据标识PHY寄存器的地址

    6、MDIO需要2个时钟的访问时间

    7、MDIO串行读出/写入16bit的寄存器数据

    8、MDIO恢复成IDLE状态,同时MDIO进入高阻状态。

  • 您好

    使用示波器察看了,MDIO写入的时序正确的。我参考的代码是ti网站上提供的“TLK110 示例代码”。

    按照tlk110数据手册Page14的说明。tlk110寄存器0x09、0x0A和0x0B的值应该设置多少?谢谢。

    以下是dump出的tlk110寄存器的值,请帮忙看看是否有问题。

    0x00

    0x3100

    参考p43

    0x01

    0x7849

     

    0x03

    0x2000

     

    0x03

    0xA211

     

    0x04

    0x01E1

     

    0x05

    0x0000

     

    0x06

    0x04

     

    0x07

    0x2991

     

    0x08

    0x0000

     

    0x09

    0x7C00

     

    0x0A

    0x0104

     

    0x0B

    0x0000

     

    0x0D

    0x0000

     

    0x0E

    0x0000

     

    0x10

    0x1002

     

    0x11

    0X0108

     

    0x12

    0x0000

     

    0x13

    0x0A00

     

    0x14

    0x0000

     

    0x15

    0x0000

     

    0x16

    0x0100

     

    0x17

    0x0001

     

    0x18

    0x0400

     

    0x19

    0x8021

     

    0x1A

    0x0010

     

    0x1B

    0x007D

     

    0x1C

    0x05EE

     

    0x1E

    0x0102

     

    0x42

    0x2000

     

    0xAE

    0x0000

     

    0xD0

    0x0002

     

    0x155

    0x0000

     

    0x170

    0x0002

     

    0x171

    0x0108

  • 您好:

       下面是我的tlk110初始化代码。这样初始化是否有问题。

    /*#1#,TLK110硬件复位,通过Reset脚*/
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET);
    HAL_Delay(5);
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET);
    HAL_Delay(5);
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET);

    /*#2#,TLK110软件复位,通过写寄存器*/

    if (HAL_OK != (HAL_ETH_WritePHYRegister(s_pEth, BMCR, 0x8000)))    //0x00

    {
    return HAL_ERROR;
    }
    if (HAL_OK != (HAL_ETH_WritePHYRegister(s_pEth, PDR, 0xC000)))    //0x1F
    {
    return HAL_ERROR;
    }

    /* Delay to assure PHY reset */
    HAL_Delay(PHY_RESET_DELAY);

    /*#3#,确认PHY ID。通过读取寄存器02和03*/

    HAL_ETH_ReadPHYRegister(s_pEth, 0x02, &phyreg);
    HAL_ETH_ReadPHYRegister(s_pEth, 0x03, &phyreg);

    /*#4#,写寄存器0x09*/

    HAL_ETH_WritePHYRegister(s_pEth, SWSCR1, DEFAULT_STRAP_CONFIG | SW_STRAP_CONFIG_DONE);
    HAL_Delay(10);