k6206调试日志

Posted by dpirly on January 3, 2018

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》

  1. 将freescale的repo
       git://git.freescale.com/imx/uboot-imx.git
    

    导入到github

       https://github.com/dpirly/k6206_uboot/
    
  2. 将代码clone到本地
       git clone -b imx_v2016.03_4.1.15_2.0.0_ga https://github.com/dpirly/k6206_uboot/
    
  3. 创建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地址。 qqq 所以,cpu的mdio接口没法同时链接两个交换机的mdio了。需要用gpio另外模拟一套。

u-boot中以太网调试命令 u-boot中有两类以太网MAC/PHY调试,miimdio添加方法:

  • 查找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_MIICONFIG_PHYLIB

    • 在board的配置文件中增加配置 K6206代码使用的是freescale i.MX6UL评估板,所以,在mx6ul_14x14_evk中增加CONFIG_CMD_MIICONFIG_PHYLIB`的定义。

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作为编译器编译代码。