最近在調Hi3516A的板,硬件不知道為什么如此設計,用一片16bit4G的ddr,16Mspi flash,按理如果是A應該是2片16bit的ddr,組成32位總線,現在怕是只能當D來用了,編譯成功后,燒錄uboot后,出現*** Warning - bad CRC, using default environment,嘗試用setenv改變量,sa也提示成功,但reset后問題還是一樣,折騰了二天,最后參考下面的才解決。
http://www.bubuko.com/infodetail-2118134.html
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#
把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,先調試別的以后再看看為什么這樣,
關於HI3516A 使用SDK06版本更換DDR和SPI FLASH遇到的問題和解決方法
標簽:int jffs2 tool 模式 fastboot 就會 con php ini
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
可以看到,我們修改的地方不多。也有可能還有其他問題沒有暴露出來。
