TI AM5728 CPSW网口调试笔记
1.调试过程遇到千兆网口起不来的问题,后来发现是phy地址不对应导致;
2.百兆网口起不来,而且整个主板有4个网口,一直显示只有两个网口硬件。目前还在排查原因。
对于设备数的语法网上已经有很多了,但是懂了语法之后可能还是不太理解具体设备树的工作原理,这里以ti的CPSW为例说明设备树与内核的驱动之家的微妙关系。
cpsw就是ti公司的Common Platform Ethernet Switch 的缩写,CPSW为三端口调换器(three port switch ),一个cpu端口,两个外部端口。CPSW或者说以太网调换驱动遵循标准的Linux网络接口构造。
对于TI的am335x的CPSW的设备树来说,其定义在am33x.dtsi文件中,内容如下:
mac:ethernet@4a100000 {
compatible ="ti,cpsw";
属性,这是跟驱动函数的匹配字符串,要跟驱动中一直。必须为“ti,cpsw“
ti,hwmods ="cpgmac0";
可选属性:对硬件模块的配置,为了跟驱动,必须是"cpgmac0"
clocks =<&cpsw_125mhz_gclk>, <&cpsw_cpts_rft_clk>;
指定时钟,其定义在 am33xx-clocks.dtsi文件中
clock-names ="fck", "cpts";
cpdma_channels = <8>;
cpdma(common platformdma)的通道数
ale_entries= <1024>;
制定ALE条目
bd_ram_size =<0x2000>;
描述内部ram的大小
no_bd_ram = <0>;
设置 HW descriptor 是否在内部bd ram,只能是0或者1
rx_descs = <64>;
制定RX描述符的个数
mac_control = <0x20>;
制定默认MAC控制寄存器的内容
slaves = <2>;
从站数量
active_slave = <0>;
cpts_clock_mult =<0x80000000>;
时钟周期转换ns系数的分子
cpts_clock_shift =<29>;
时钟周期转换ns系数的分母
reg = <0x4a100000 0x800
0x4a101200 0x100>;
cpsw寄存器映射地址
#address-cells = <1>;
#size-cells = <1>;
interrupt-parent =<&intc>;
父中断控制器
/*
* c0_rx_thresh_pend
* c0_rx_pend
* c0_tx_pend
* c0_misc_pend
*/
interrupts = <40 41 4243>;
描述中断号
ranges;
davinci_mdio: mdio@4a101000{
compatible ="ti,davinci_mdio";
#address-cells =<1>;
#size-cells =<0>;
ti,hwmods ="davinci_mdio";
bus_freq =<1000000>;
reg = <0x4a1010000x100>;
};
cpsw_emac0: slave@4a100200{
以太网控制器
/* Filled in byU-Boot */
mac-address = [ 0000 00 00 00 00 ];
};
cpsw_emac1: slave@4a100300{
/* Filled in byU-Boot */
mac-address = [ 0000 00 00 00 00 ];
};
phy_sel:cpsw-phy-sel@44e10650 {
compatible ="ti,am3352-cpsw-phy-sel";
reg= <0x44e106500x4>;
phy寄存器的基地址和寄存器大小
reg-names ="gmii-sel";
};
};
接下来看一下内核是如何调用这些参数的:
首先在文件Cpsw.c (drivers\net\ethernet\ti)中的平台驱动结构体中有of_match_table匹配函数:
static structplatform_driver cpsw_driver = {
.driver = {
.name = "cpsw",
.owner = THIS_MODULE,
.pm = &cpsw_pm_ops,
.of_match_table= cpsw_of_mtable,
static conststruct of_device_id cpsw_of_mtable[] = {
{.compatible ="ti,cpsw", },
{ /* sentinel */ },
};
结构体中.compatible = "ti,cpsw",正好跟设备树中的cpsw节点属性一致。于是会匹配成功,进而执行probe函数。
在probe函数中,驱动为了获取dts中设置的参数,其调用了cpsw_probe_dt。该函数的主要获取数据的函数有:
of_property_read_u32(node,"slaves", &prop)
获取在dts文件中的slaves的个数:slaves = <2>;
of_property_read_u32(node,"active_slave", &prop)
获取设定的active_slave的参数:active_slave= <0>;
of_property_read_u32(node,"cpts_clock_mult", &prop)
获取设定的cpts_clock_mult的参数:cpts_clock_mult = <0x80000000>;
就这样吧,内核启动就把dts中的信息读出来然后为之后的驱动程序提供数据。
参考:https://blog.csdn.net/wxxgoodjob/article/details/77893303
TI AM5728 CPSW网口调试笔记相关推荐
- 转载:ZYNQ+linux网口调试笔记(1)PS-GEM0
ZYNQ+linux网口调试笔记(1)PS-GEM0 转载原文:https://www.jianshu.com/p/a4e25e8b2f5e 开发环境 Windows SDK 2017.4 Ubunt ...
- zynq linux ip配置,ZYNQ+linux网口调试笔记(2)PS-GEM1
1. 开发环境 Windows SDK 2017.4 Ubuntu Petalinux 2017.4 硬件平台:米联客ZYNQ开发板MIZ7035 2. 开发目标 在ZYNQ上使用gigE Visio ...
- zynq linux如何使用pl ip,ZYNQ+linux网口调试笔记(3)PL-ETH
1. 开发环境 Windows SDK 2017.4 Ubuntu Petalinux 2017.4 硬件平台:米联客ZYNQ开发板MIZ7035 2. 开发目标 在ZYNQ上使用gigE Visio ...
- TI AM5728 RTOS环境搭建笔记
官方文档: http://software-dl.ti.com/processor-sdk-rtos/esd/AM57X/latest/index_FDS.html
- TI AM5728 SDK升级之 linux设备树解析,以网口cpsw为例
如果一个结点描述的设备有地址,则应该给出@unit-address.多个相同类型设备结点的name可以一样,只要unit-address不同即可,如本例中含有cpu@0.cpu@1以及serial@1 ...
- OMAPL138调试笔记
title: Linux 嵌入式使用 tags: 新建,模板,小书匠 grammar_cjkRuby: true Copyright (C) @2018 Widic Filename:File-fun ...
- OMAP3530-mini调试笔记(2)
PS:USB不能正常工作的根本原因参见调试笔记(3) 各个版本的x-loader和u-boot对kernel的支持情况: U-Boot 2011.12-00010-ga3eb89c (Jan 29 2 ...
- 基于TI AM5728(浮点双DSP C66x +双ARM Cortex-A15)的开发板
开发板简介 基于TI AM5728浮点双DSP C66x +双ARM Cortex-A15工业控制及高性能音视频处理器: 多核异构CPU,集成双核Cortex-A15.双核C66x浮点DSP.双核PR ...
- TI AM5728 DSP+ARM+FPGA多核异构工业控制处理器
TI AM5728 DSP+ARM+FPGA多核异构工业控制处理器. DSP用于复杂算法处理,ARM用于通用事务管理,FPGA用于高速信号采集,是个完美的高性能嵌入式工业主板组合. DSP算法开发 对 ...
最新文章
- .net mvc mssql easyui treegrid
- 【MATLAB】流程控制 ( 循环结构 | for 循环 | while 循环 | 分支结构 | if end 分支结构 | if else end 分支结构 | switch case 分支结构 )
- LeetCode集锦(十) - 第28题 Implement StrStr
- spring-cloud学习demo,git地址
- Vertica系列: Vertica 数仓简单介绍
- 转 《pywinauto进行win32应用程序的测试》
- php联合查询的前提条件,PHP生成HTML前提条件及原理介绍_PHP教程
- 思考 | 西湖大学博导:都说不唯论文,那我们发表论文是为了什么?
- python2.7没有pip_python2.7无法使用pip怎么办
- linux服务器之LVS、Nginx和HAProxy负载均衡器对比
- RocketMQ的底层通信模块remoting 源码解析
- Visual Studio中C++关于Unicode字符集和多字节字符集
- windowsxp系统桌面卡住了解决
- 语音识别_ML-KWS-for-MCU_资料整理
- 易语言浏览本地html,简单的易语言读取网页文本程序
- linux下载文件到本地
- is running beyond physical memory limits. Current usage: 1.0 GB of 1 GB physical memory used......
- ERP(Enterprise Resource Planning)/企业资源计划
- /dev下面存在设备,却open 失败的问题open: No such device or address
- Zigbee 无线传感网络 无线通信技术 协议体系结构 OSAL