前段时间买了一个Lichee RV Dock,最近回学校用实验室的风枪焊了一个W25Q128JVPIQ Flash上去,编译了https://github.com/smaeul/sun20i_d1_spl,使用xboot的xfel工具把编译之后的boot0_spinor_sun20iw1p1.bin文件写进spi flash里。xfel工具可以正确读取flash的大小和对flash进行读写操作,但是在使用spi flash上电启动板子时,显示错误信息spinor init fail。
我在SPL的代码里简单定位了一下这个错误的位置,发现问题出在drivers/spinor/spinor.c中。在spinor_init函数里,调用spinor_read_id(id)正常返回0,但是读取到的id数组是0x00 0x00 0x00,没有正确返回flash的id信息,进而代码判断读取flash出错,返回-1.
我在源代码里加了一些log,详细的log如下:
[26]HELLO! BOOT0 is starting!
[29]BOOT0 commit : 0dcb25c-dirty
[32]set pll start
[34]periph0 has been enabled
[37]set pll end
[38]board init ok
[40]DRAM only have internal ZQ!!
[43]get_pmu_exist() = -1
[46]ddr_efuse_type: 0x0
[49][AUTO DEBUG] single rank and full DQ!
[53]ddr_efuse_type: 0x0
[56][AUTO DEBUG] rank 0 row = 15
[58][AUTO DEBUG] rank 0 bank = 8
[62][AUTO DEBUG] rank 0 page size = 2 KB
[65]DRAM BOOT DRIVE INFO: V0.24
[68]DRAM CLK = 792 MHz
[70]DRAM Type = 3 (2:DDR2,3:DDR3)
[74]DRAMC ZQ value: 0x7b7bfb
[76]DRAM ODT value: 0x42.
[79]ddr_efuse_type: 0x0
[82]DRAM SIZE =512 M
[85]DRAM simple test OK.
[87]dram size =512
[89]spi init complete
[91]spinor_read_id returns 0
[94]spinor id is: 00 00 00, read cmd: 0b
[97]spinor init fail
看这个情况似乎是spi的驱动有问题,不知道有没有人使用spi flash测试过,求大佬指教...
离线