K6206调试日志
实现目标
完成k6206直流电源产品, 特性包括(仅包括软件部分):
- 全网络控制电源,满足LXI标准(基于Web的远控)
- 远控接口支持,VXI-11, HiSLIP,兼容NI ENET-GPIB/100,并支持USB TMC
- SCPI命令兼容Keysight(Agilent)66319D
- 带GUI界面显示与控制
代码管理
linux世界几乎全部用git作为代码管理工具,代码都是从git上直接clone下来编译的。所以我们也一样! u-boot, linux kerenl等代码放到github.com下。
bootloader(u-boot)调试
2018-01-03完成底板调试完成,核心版可以启动。BSP部分来源于NXP(freescale)。 基于i.MX6UL 14x14 EVK评估板修改。 BSP可以从nxp的官方网站下载, 版本为4.1.15_2.0.0。
详见文档:《i.MX_Yocto_Project_User’s_Guide.pdf》
- 将freescale的repo
git://git.freescale.com/imx/uboot-imx.git
导入到github
https://github.com/dpirly/k6206_uboot/
- 将代码clone到本地
git clone -b imx_v2016.03_4.1.15_2.0.0_ga https://github.com/dpirly/k6206_uboot/
- 创建k6206分支
调试u-boot
K6206 Ethernet PHY电路问题 在imx6中,cpu包含两个以太网mac,所以在uboot中,可以配置两个FEC(FEC0和FEC1)。但是整个芯片只有一个SMI(mdio)接口。正常应用时,两个FEC各接一个PHY,PHY通过外部电阻配置其mdio地址,而cpu的SMI(mdio)接口同时连接到两个PHY上,通过地址区分PHY。
K6206应用时,用了两个交换机芯片(IP175D),cpu的两个FEC是通过RMII直接链接到以太网交换机芯片的MAC上,而交换机芯片没有可以通过外部电阻设置的MDIO地址。 所以,cpu的mdio接口没法同时链接两个交换机的mdio了。需要用gpio另外模拟一套。
u-boot中以太网调试命令
u-boot中有两类以太网MAC/PHY调试,mii
和mdio
。
添加方法:
-
查找cmd所在的源码
uboot的所有命令,都是用宏
U_BOOT_CMD
定义的。在所有源码中搜索所有引用这个宏的代码。其中,cmd目录下的mii.c
U_BOOT_CMD(
mii, 6, 1, do_mii,
"MII utility commands",
"device - list available devices\n"
"mii device <devname> - set current device\n"
"mii info <addr> - display MII PHY info\n"
"mii read <addr> <reg> - read MII PHY <addr> register <reg>\n"
"mii write <addr> <reg> <data> - write MII PHY <addr> register <reg>\n"
"mii modify <addr> <reg> <data> <mask> - modify MII PHY <addr> register <reg>\n"
" updating bits identified in <mask>\n"
"mii dump <addr> <reg> - pretty-print <addr> <reg> (0-5 only)\n"
"Addr and/or reg may be ranges, e.g. 2-7."
);
就是mii调试命令的注册部分,类似的,mdio的在cmd目录下的mdio.c中:
U_BOOT_CMD(
mdio, 6, 1, do_mdio,
"MDIO utility commands",
"list - List MDIO buses\n"
"mdio read <phydev> [<devad>.]<reg> - "
"read PHY's register at <devad>.<reg>\n"
"mdio write <phydev> [<devad>.]<reg> <data> - "
"write PHY's register at <devad>.<reg>\n"
"mdio rx <phydev> [<devad>.]<reg> - "
"read PHY's extended register at <devad>.<reg>\n"
"mdio wx <phydev> [<devad>.]<reg> <data> - "
"write PHY's extended register at <devad>.<reg>\n"
"<phydev> may be:\n"
" <busname> <addr>\n"
" <addr>\n"
" <eth name>\n"
"<addr> <devad>, and <reg> may be ranges, e.g. 1-5.4-0x1f.\n"
);
-
在Makefile文件中找到源码的编译条件
在cmd目录里的Makefile中,要编译mii.o和mdio.o需要定义
CONFIG_CMD_MII
和CONFIG_PHYLIB
- 在board的配置文件中增加配置
K6206代码使用的是freescale i.MX6UL评估板,所以,在mx6ul_14x14_evk中增加CONFIG_CMD_MII
和
CONFIG_PHYLIB`的定义。
- 在board的配置文件中增加配置
K6206代码使用的是freescale i.MX6UL评估板,所以,在mx6ul_14x14_evk中增加CONFIG_CMD_MII
uboot中以太网phy寄存器访问地址理解
输入mii device
可以列出所有mii设备
mii read <addr> <reg>
命令可以读出mii寄存器内容
I2C 调试
- uboot使用i2c命令调试i2c接口
- i2c bus 列出当前cpu的i2c控制器
- i2c dev 切换当前i2c控制器
- i2c probe 探查当前控制器下的i2c设备
SPI 调试
- 修改iomux
- 初始化spi控制器
- 添加spi读写命令
linux kernel调试
linux内核代码从git://git.freescale.com/imx/linux-imx.git
导入,并基于imx_4.1.15_2.0.0_ga
创建k6206
分支。
https://github.com/dpirly/k6206_linux/tree/k6206
编译时执行(编译之前需要设置sdk环境变量):
./build_kernel.sh
SPI 调试
- 配置内核
- 修改设备树(Device Tree)
- 使用应用程序测试SPI接口
如何使用freescale yocto生成的compiler编译自己的代码
- 使用yocto生成sdk
- 将sdk安装到host PC
- source /安装路径/enviroment-setup-xxxx
- 使用$CC作为编译器编译代码。