微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > tlk110驱动的问题

tlk110驱动的问题

时间:10-02 整理:3721RD 点击:

各位:

    现在正在调试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);

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top