最近在调Hi3516A的板,硬件不知道为何如此设计,用一片16bit4G的ddr,16Mspi flash,按理若是是A应该是2片16bit的ddr,组成32位总线,如今怕是只能当D来用了,编译成功后,烧录uboot后,出现*** Warning - bad CRC, using default environment,尝试用setenv改变量,sa也提示成功,但reset后问题仍是同样,折腾了二天,最后参考下面的才解决。php
http://www.bubuko.com/infodetail-2118134.htmlhtml
U-Boot 2010.06 (Jan 05 2018 - 12:08:26)网络
Check spi flash controller v350... Found
Spi(cs1) ID: 0xC2 0x20 0x18 0xC2 0x20 0x18
Spi(cs1): Block:64KB Chip:16MB Name:"KH25L12835F"
*** Warning - bad CRC, using default environment工具
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
uboOT#
uboOT#spa
把uboot和kernel下drivers\mtd\spi\hisfc350\hisfc350_spi_ids.c的文件,定义一个CONFIG_CLOSE_SPI_8PIN_4IO设计
#define CONFIG_CLOSE_SPI_8PIN_4IO调试
按理demo板也是用的spi nor flash,先调试别的之后再看看为何这样,
excel
标签:int jffs2 tool 模式 fastboot 就会 con php ini htm
HI3516A 更换DDR 和 FLASH
最近有新的需求须要使用SDK06版本,以及在硬件上更换了DDR和 FLASH,遇到了一些问题,这段时间搜索了不少hisi的资料和帖子,大概作了以下的总结,
但愿对你们有帮助,如有错误的地方或遗漏的地方,请指出。谢谢。
更换DDR 和 flash,则须要更新uboot,由于里面包含了DDR和flash的配置。
首先须要对hisi的uboot有所了解。
hisi uboot分解为两部分。前面一部分为DDR的参数和其余寄存器的配置,总过大小为4K
具体的地址为从0x40 开始的4K大小。
这4K的配置是经过hisi提供的execl表格生成的一个reg_info.bin文件,而后经过mkboot.sh脚本把reg_info.bin和咱们编译完的u-boot.bin
合成一个完整的bin文件,这样咱们就能够经过fastboot工具中的Burn Fastboot 模式来刷机了。
如何配置execl中的参数。
reg_info.bin 若是仔细看,会发现里面都是excel中提到的寄存器地址而后是后面紧跟这个寄存器的值,若是恰巧别人没有提供这个表格,
本身也能够经过这个一步一步对比找出来。或者不想麻烦,直接把别人uboot中的前面4K 复制到本身的uboot bin 文件上。
1,excel文件的选择
在osdrv\tools\pc\uboot_tools中有两支不一样DDR CPU 频率的表格,选择的时候要注意点。
Hi3516A-DMEB-uboot-DDR250M-1GB-32bit-CPU600M-BUS198M.xls
Hi3516A-DMEB-uboot-DDR297M-1GB-32bit-CPU850M-BUS198M.xls
若是你的HISI3516A 是超频到850M的,则要选择Hi3516A-DMEB-uboot-DDR297M-1GB-32bit-CPU850M-BUS198M.xls
hisi3516A的CPU 正常是600M的,因此就选择Hi3516A-DMEB-uboot-DDR250M-1GB-32bit-CPU600M-BUS198M.xls
在这个文件更改的地方很少。不少时候会发现根本不用改什么就OK了 O(∩_∩)O~
DDR的就看位宽和bit,bank数,
修改的地方以下:
DDRC_CFG_DDRMODE 存储数据总线位宽
AXI_CONFIG BANK 位宽配置
fastboot 工具会先将uboot经过串口线下载到的板子上,而后启动uboot, 若是下载进去后出现DDR init state error 则有可能就是上面配置没对
uboot启动后,就会把本身写入到flash中,前提是flash的驱动在uboot中已作了配置
2 SPI 配置
以下是uboot的某个spi flash 配置,参考其余帖子说在READ WRITE中只保留READ_STD和WRITE_STD,才能有正常读写。
{
"W25Q256FV", {0xEF, 0x40, 0x19}, 3, _32M, _64K, 4,
{
&READ_STD(0, INFINITE, 50),
//&READ_FAST(1, INFINITE, 80),
//&READ_DUAL(1, INFINITE, 80),
//&READ_QUAD(1, INFINITE, 80),
0
},
{
&WRITE_STD(0, 256, 50),
//&WRITE_QUAD(0, 256, 80),
0
},
{
&ERASE_SECTOR_64K(0, _64K, 50),
0
},
&spi_driver_w25q256fv,
},
在kernel中也要这样改,否则再挂载文件系统的时候会出现jffs2: jffs2_scan_eraseblock() 错误
还有一个重要的点是会影响串口的输出:须要把以下配置改成03
DX3CTRL 0x388 0x00 -->0x03
DX2CTRL 0x308 0x00 -->0x03
咱们就会在串口中看到有输出,而且可以进入uboot模式,否则串口没有任何输出
3,网络配置
海思提供的网络模式模式是rgmii,因此若是你的模式不是这种或者是PHY接口不对,网络就ping不通。
会出现以下错误:
ETH0: PHY(phyaddr=1, rmii) not link!
higmac init fail!
/include/configs/hi3516a.h
添加网络模式
#define CONFIG_MDIO_INTF "rmii"
#define CONFIG_HIGMAC_PHY1_INTERFACE_MODE 1
PHY的地址修改,能够经过mii info 来查看是属于0 仍是1 ,或者其余
#define CONFIG_HIGMAC_PHY1_ADDR 1
还须要在execel的表格中 把时钟配置为RMILL clk的时钟50M
muxctrl_reg93 0x174 0x2 -->0x01
在kernel中须要在config中CONFIG_HIGMAC_PHY0_INTERFACE_MODE 修改成5
mill rmii rgmii 三种模式在uboot为 0 1 2 kernel中为1 5 6
能够看到,咱们修改的地方很少。也有可能还有其余问题没有暴露出来。接口