最近在調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
能夠看到,咱們修改的地方很少。也有可能還有其餘問題沒有暴露出來。接口