您尚未登录。

楼主 # 2021-05-23 10:37:28

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

全志D1芯片之终极探索

开这帖子,估计就是为了扒光这颗芯片的内裤。

先来点初步研究成果,这个芯片里面的RISCV核玄铁906只能算通房丫鬟,正室还是ARM,估计是双核cortex-a7,当然还带有一个hifi dsp,这个是第三方的不公开,也不值得研究。

这个芯片算异构系统,总共4个核,2个cortex-a7(可能是一个,但一定存在),一个riscv-64,一个dsp。

初步确认的马甲有,D1, T1033, R528-RV, ...

V, T, R, F系列都会有马甲,静候风暴吧,这是一个什么钱都能挣到的马甲,同志们,努力研究吧,会有惊喜的。

离线

楼主 #1 2021-05-23 10:55:16

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

关于DSP,关注Tensilica 这家公司,应该会有答案

离线

楼主 #2 2021-05-23 11:20:46

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

cat /proc/cpuinfo 
processor       : 0
hart            : 0
isa             : rv64imafdcvu
mmu             : sv39

RISCV核支持的扩展,以及mmu信息

离线

楼主 #3 2021-05-23 13:51:24

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

正室是可以被关禁闭的。

=> md.l 0x02001504 1
02001504: 80000000                               ....
=> md.l 0x02001500 2
02001500: 00000300 80000000                      ........
=> md.l 0x02001504 1
02001504: 80000000                               ....
=> mw.l 0x02001504 0x000016aa
=> md.l 0x02001504 1         
02001504: 00000000                               ....
=> 
02001508: 00000000                               ....
=> md.l 0x02001504 1
02001504: 00000000                               ....
=> md.l 0x02001504 1
02001504: 00000000                               ....

离线

楼主 #4 2021-05-23 15:18:07

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

opensbi太恶心了,程序都不給跳转,一跳转就指令异常,直接干掉这个,影响我开发引导程序

离线

楼主 #5 2021-05-23 15:21:00

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

修改boot0干掉opensbi,修改uboot,增加go指令,借助fastboot,顺利启动xboot

=> go 0x41000800
## Starting application at 0x41000800 ...
OOOO       _                   _                     
 _  _ | |___ _____ _____ _| |_                   
\ \/ /|  _  |  _  |  _  |_   _|  (C) 2007-2021   
 )  ( | |_| | |_| | |_| | | |____JIANJUN.JIANG__ 
/_/\_\|_____|_____|_____| |_____________________|
V3.0.0 (May 23 2021 - 15:15:37) - [nezha][Nezha Based On Allwinner D1 SOC]
[    0.000000] Probe device 'blk-romdisk.0' with blk-romdisk
[    0.000010] Probe device 'xin24m' with clk-fixed
[    0.000020] Probe device 'xin10m' with clk-fixed
[    0.000030] Probe device 'xin32k' with clk-fixed
[    0.000040] Probe device 'uart0' with clk-link
[    0.000050] Probe device 'uart1' with clk-link
[    0.000060] Probe device 'uart2' with clk-link
[    0.000070] Probe device 'uart3' with clk-link
[    0.000080] Probe device 'uart4' with clk-link
[    0.000090] Probe device 'uart5' with clk-link
[    0.000100] Probe device 'uart-16550.0' with uart-16550
[    0.000110] Probe device 'uart-16550.1' with uart-16550
[    0.000120] Probe device 'uart-16550.2' with uart-16550
[    0.000130] Probe device 'uart-16550.3' with uart-16550
[    0.000140] Probe device 'uart-16550.4' with uart-16550
[    0.000150] Probe device 'uart-16550.5' with uart-16550
[    0.000160] Probe device 'console-uart.0' with console-uart
[    0.000170] mount /private with 'ram' filesystem
Press any key to stop auto boot:  0.000
 could not found 'launcher' command
xboot: /#  
xboot: /# 
xboot: /# 
xboot: /# help
 cat       - show the contents of a file
 cd        - change the current working directory
 clear     - clear the terminal screen
 cp        - copy files and directories
 date      - print the system date and time
 dcp       - device copy for file or block or memory
 delay     - delay for a specified time
 echo      - echo the string to standard output
 env       - display environment variable
 event     - show all of input events
 fdt       - flattened device tree utility commands
 go        - start application at address
 help      - show online help about command
 kill      - kill the window task
 ls        - list directory contents
 md        - dump a memory region
 mkdir     - make directories
 mkfat16   - format fat16 filesystem on block device
 mkfat32   - format fat32 filesystem on block device
 mkz       - compress and encrypt and signature image
 mount     - mount a file system
 mv        - move (rename) files
 mw        - write values to memory region
 overview  - show overview application of xui
 ps        - report a snapshot of the current processes
 pwd       - print the current working directory
 reboot    - reboot the target system
 rm        - remove files or directories
 rx        - receive file using xmodem
 setting   - display the global setting
 sha1sum   - compute sha1 message digest
 sha256sum - compute sha256 message digest
 shutdown  - shutdown the target system
 sleep     - sleep the target system
 sx        - send file using xmodem
 sync      - synchronize cached writes to storage
 test      - debug command for programmer
 tree      - list contents of directories in a tree-like format
 umount    - unmount a file system
 version   - show xboot version information
 write     - write contents to a file
 xsync     - xsync server for file copying

为了达成这一步,用了很多高级技巧,万事开头难。现在啥工具都缺。

离线

#6 2021-05-23 15:36:33

Meekdai
会员
注册时间: 2021-04-30
已发帖子: 25
积分: 37.5

Re: 全志D1芯片之终极探索

XBOOT要上D1了~~

离线

#7 2021-05-23 15:41:12

metro
会员
注册时间: 2019-03-09
已发帖子: 341
积分: 321.5

Re: 全志D1芯片之终极探索

搬个小板凳等楼主更新

离线

#8 2021-05-23 15:48:48

mfkiwl
会员
注册时间: 2019-02-27
已发帖子: 38
积分: 31

Re: 全志D1芯片之终极探索

xboot 说:

关于DSP,关注Tensilica 这家公司,应该会有答案

HIFI DSP应该和其它家的差不多。不是3就是4了

离线

楼主 #9 2021-05-23 17:55:00

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

#define SID_PRCTL               (IOMEM_ADDR(SUNXI_SID_BASE) + 0x40)
#define SID_PRKEY               (IOMEM_ADDR(SUNXI_SID_BASE) + 0x50)
#define SID_RDKEY               (IOMEM_ADDR(SUNXI_SID_BASE) + 0x60)
#define SJTAG_AT0               (IOMEM_ADDR(SUNXI_SID_BASE) + 0x80)
#define SJTAG_AT1               (IOMEM_ADDR(SUNXI_SID_BASE) + 0x84)
#define SJTAG_S                 (IOMEM_ADDR(SUNXI_SID_BASE) + 0x88)
#define SID_EFUSE               (IOMEM_ADDR(SUNXI_SID_BASE) + 0x200)
#define SID_OP_LOCK  (0xAC)

#define EFUSE_CHIPID            (0x0)
#define EFUSE_ANTI_BRUSH		(0x10)
#define EFUSE_OEM_PROGRAM		(0x38)

#define ANTI_BRUSH_BIT_OFFSET			(31)
#define ANTI_BRUSH_MODE			(SID_EFUSE + EFUSE_ANTI_BRUSH)

/* write protect */
#define EFUSE_WRITE_PROTECT		(0x40)
/* read  protect */
#define EFUSE_READ_PROTECT		(0x44)
/* jtag security */

#define EFUSE_HUK					(0x50)
#define EFUSE_ROTPK					(0x70)
#define EFUSE_SSK					(0x90)
#define EFUSE_RSSK					(0xB0)
#define EFUSE_HDCP_HASH				(0xC0)
#define EFUSE_NV1					(0xD0)
#define EFUSE_NV2					(0xD4)
#define EFUSE_OEM_PROGRAM_SECURE	(0xE4)

#define SID_HUK_SIZE					(192)
#define SID_OEM_PROGRAM_SIZE			(64)
#define SID_SSK_SIZE					(256)
#define SID_RSSK_SIZE					(128)
#define SID_HDCP_HASH_SIZE				(128)
#define SID_OEM_PROGRAM_SECURE_SIZE		(224)

/*read protect*/
#define SCC_OEM_PROGRAM_DONTSHOW_FLAG			(4)
#define SCC_ROTPK_DONTSHOW_FLAG					(12)
#define SCC_SSK_DONTSHOW_FLAG					(13)
#define SCC_RSSK_DONTSHOW_FLAG					(14)
#define SCC_HDCP_HASH_DONTSHOW_FLAG				(15)
#define SCC_OEM_PROGRAM_SECURE_DONTSHOW_FLAG	(18)

/*write protect*/
#define SCC_OEM_PROGRAM_BURNED_FLAG				(4)
#define SCC_HUK_BURNED_FLAG						(9)
#define SCC_ROTPK_BURNED_FLAG					(12)
#define SCC_SSK_BURNED_FLAG						(13)
#define SCC_RSSK_BURNED_FLAG					(14)
#define SCC_HDCP_HASH_BURNED_FLAG				(15)
#define SCC_OEM_PROGRAM_SECURE_BURNED_FLAG		(18)

/*efuse power ctl*/
#define EFUSE_HV_SWITCH			(IOMEM_ADDR(SUNXI_RTC_BASE) + 0x204)

整个秘密都在SID里,这是个比较有用的信息,现在xboot可以获取D1的唯一序列号。

xboot: /# cat sys/class/machine/nezha/uniqueid
92805000dc0048140141d5812c5a1b0b

离线

#10 2021-05-23 18:16:11

拉轰的脚踏车
会员
注册时间: 2020-03-20
已发帖子: 240
积分: 196

Re: 全志D1芯片之终极探索

请问楼主, #5 楼怎么进入uboot命令模式? 按什么按键?

离线

楼主 #11 2021-05-23 19:43:06

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

拉轰的脚踏车 说:

请问楼主, #5 楼怎么进入uboot命令模式? 按什么按键?

需要修改uboot的bootdelay

离线

楼主 #12 2021-05-23 19:45:04

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

实现reset驱动,gpio驱动,串口驱动,还有一堆工作要做,任重道远!

离线

#13 2021-05-24 11:37:40

mango
会员
所在地: 芒果派
注册时间: 2017-12-02
已发帖子: 673
积分: 670
个人网站

Re: 全志D1芯片之终极探索

加一条,D1对应F系的F133。
芯片内包的东西比较多(设计时并非只针对RV推出的芯片),所以D1的价格会比较尴尬。

离线

楼主 #14 2021-05-24 12:02:06

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

是的,无所不包,要什么有什么,算比较完美的芯片,当然晶圆面积也小不了哪里去,脚越多的,全志定价肯定越贵,虽然是同一个东西。在满足要求的同时,尽量选脚少的。

离线

楼主 #15 2021-05-24 12:03:59

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

如果包DDR版本定价在4个美金左右,还是有杀伤力的。

离线

#16 2021-05-24 18:58:12

Kirin
会员
注册时间: 2020-10-09
已发帖子: 25
积分: 24

Re: 全志D1芯片之终极探索

感谢楼主研究我们的芯片,很细致,点赞.jpg
但是这几个不是一个芯片,需要澄清一下,以免各位开发者选片的时候误导了,具体还请咨询实际的商务和代理。
我大概说一下:D1——RISC-V片子; T1033——A7片子;R528-RV合作伙伴预研的时候拿到的测试片,后面不会再有了
有些片子可能有共台的情况,但是不是一个片子啊,都是内部要生要死分几个项目做出来的(泪目~

离线

楼主 #17 2021-05-24 20:30:06

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

@Kirin
马甲不马甲,我们也真没那么关心,比较关心的还是哪有卖更实惠的芯片,能让利消费者,产品拥有成本优势,能在市场上拥有竞争力。这才是选择的出发点。你科技进步了,成本得降,不然那算哪门子科技进步。

离线

#18 2021-05-25 00:57:51

david
会员
注册时间: 2018-03-05
已发帖子: 154
积分: 138.5

Re: 全志D1芯片之终极探索

这芯片拿来做图像处理可以吗 看里面hifi数字处理器像是搞音频的

离线

#19 2021-05-25 15:20:45

jlau
会员
注册时间: 2018-06-11
已发帖子: 141
积分: 134.5

Re: 全志D1芯片之终极探索

xboot 说:

@Kirin
马甲不马甲,我们也真没那么关心,比较关心的还是哪有卖更实惠的芯片,能让利消费者,产品拥有成本优势,能在市场上拥有竞争力。这才是选择的出发点。你科技进步了,成本得降,不然那算哪门子科技进步。

话不能这么绝对,活在经济规律中,大家都要养家糊口的 big_smile

离线

#20 2021-05-25 20:36:22

Kirin
会员
注册时间: 2020-10-09
已发帖子: 25
积分: 24

Re: 全志D1芯片之终极探索

xboot 说:

@Kirin
马甲不马甲,我们也真没那么关心,比较关心的还是哪有卖更实惠的芯片,能让利消费者,产品拥有成本优势,能在市场上拥有竞争力。这才是选择的出发点。你科技进步了,成本得降,不然那算哪门子科技进步。

收到,细心听取大家的建议(respect!

离线

#21 2021-05-25 21:55:56

TeveT
会员
注册时间: 2019-07-01
已发帖子: 88
积分: 60

Re: 全志D1芯片之终极探索

前来膜拜大神
D1包了那么多东西,然而少了MIPI-CSI 和 H264编码,不然就齐活了

离线

楼主 #22 2021-05-26 12:13:21

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

工欲善其事,必先利其器,先开发个fel工具,名叫xfel

xfel-v1.0.0 https://github.com/xboot/xfel
usage:
    xfel help                                   - Print this usage summary
    xfel version                                - Show brom version
    xfel hexdump <address> <length>             - Dumps memory region in hex
    xfel dump <address> <length>                - Binary memory dump to stdout
    xfel exec <address>                         - Call function address
    xfel read32 <address>                       - Read 32-bits value from device memory
    xfel write32 <address> <value>              - Write 32-bits value to device memory
    xfel read <address> <length> <file>         - Read memory to file
    xfel write <address> <file>                 - Write file to memory
    xfel reset                                  - Reset device using watchdog
    xfel sid                                    - Output 128-bits SID information
    xfel jtag                                   - Enable JTAG debug
    xfel ddr [type]                             - Initial DDR controller with optional type
    xfel spinor                                 - Detect spi nor flash
    xfel spinor read <address> <length> <file>  - Read spi nor flash to file
    xfel spinor write <address> <file>          - Write file to spi nor flash
    xfel spinand                                - Detect spi nand flash
    xfel spinand read <address> <length> <file> - Read spi nand flash to file
    xfel spinand write <address> <file>         - Write file to spi nand flash

离线

楼主 #23 2021-05-26 12:17:21

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

xfel项目工程路径,理论上全志全系列芯片都可以支持,不管是arm32,arm64,riscv64,短期重点目标是riscv64的D1支持,设计时避免过多hack,增强适应性,最大的特色借用xfel工具可以直接初始化DDR。
感兴趣的,可以尝尝鲜,开发中...
https://github.com/xboot/xfel

离线

#24 2021-05-26 14:55:23

kakatoo
会员
注册时间: 2018-10-08
已发帖子: 50
积分: 48.5

Re: 全志D1芯片之终极探索

@Kirin
那D1里到底有木有A7呢?

离线

#25 2021-05-26 17:16:43

金志工程师
会员
注册时间: 2020-05-16
已发帖子: 7
积分: 6.5

Re: 全志D1芯片之终极探索

kakatoo 说:

@Kirin
那D1里到底有木有A7呢?

存在,但是D1锁死,没得用arm的哦,你用不了

离线

楼主 #26 2021-05-26 18:13:22

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

d1-brom.zip
利用xfel工具dump出来的D1 brom,感兴趣的可以逆向看看

离线

#27 2021-05-26 18:26:21

nikoladi
会员
注册时间: 2019-12-28
已发帖子: 14
积分: 2.5

Re: 全志D1芯片之终极探索

为什么帖子的最后一个回复总是看不到???

离线

楼主 #28 2021-05-27 23:58:28

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

一段代码来石锤正室的存在,cortex-a7,不要有任何怀疑。

	/* a7:Reparent CPU during PLL CPU rate changes */
	ccu_mux_notifier_register(pll_cpux_clk.common.hw.clk,
				  &sun8iw20_cpu_nb);

	/* riscv:Reparent CPU during PLL CPU rate changes */
	ccu_mux_notifier_register(pll_cpux_clk.common.hw.clk,
				  &sun20iw1_cpu_nb);

离线

楼主 #29 2021-05-28 10:28:53

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

root@TinaLinux:/sys/kernel/debug/clk# cat clk_summary
                                 enable  prepare  protect                                duty
   clock                          count    count    count        rate   accuracy phase  cycle
---------------------------------------------------------------------------------------------
 ext-32k                              1        1        0       32768          0     0  50000
    ext32k-gate                       1        1        0       32768          0     0  50000
       osc32k                         1        1        0       32768          0     0  50000
          r-apb0-ir-rx                0        0        0       32768          0     0  50000
          rtc-32k-fanout              0        0        0       32768          0     0  50000
          rtc32k                      1        1        0       32768          0     0  50000
             rtc-1k                   1        1        0        1024          0     0  50000
 rc-16m                               0        0        0    16000000  300000000     0  50000
    iosc                              0        0        0    16000000  300000000     0  50000
       iosc-div32k                    0        0        0       32000  300000000     0  50000
 dcxo24M                              6        6        0    24000000          0     0  50000
    r-apb0                            0        0        0    24000000          0     0  50000
       r-apb0-cpucfg                  0        0        0    24000000          0     0  50000
       r-apb0-bus-ir-rx               0        0        0    24000000          0     0  50000
       r-ppu                          0        0        0    24000000          0     0  50000
       r-apb0-twd                     0        0        0    24000000          0     0  50000
       r-apb0-timer                   0        0        0    24000000          0     0  50000
    r-ahb                             2        2        0    24000000          0     0  50000
       r-ahb-rtc                      1        1        0    24000000          0     0  50000
       rtc-spi                        1        1        0    24000000          0     0  50000
    fanout-24m                        0        0        0    24000000          0     0  50000
    tpadc                             0        0        0    24000000          0     0  50000
    csi0-mclk                         0        0        0    24000000          0     0  50000
    ledc                              0        0        0    24000000          0     0  50000
    tvd                               0        0        0    24000000          0     0  50000
    hdmi-24m                          0        0        0    24000000          0     0  50000
    ir-tx                             0        0        0    24000000          0     0  50000
    spi1                              0        0        0    24000000          0     0  50000
    mmc2                              0        0        0    24000000          0     0  50000
    mmc0                              0        0        0      800000          0     0  50000
    avs                               0        0        0    24000000          0     0  50000
    apb1                              1        1        0    24000000          0     0  50000
       bus-i2s2                       0        0        0    24000000          0     0  50000
       bus-i2s1                       0        0        0    24000000          0     0  50000
       bus-i2s0                       0        0        0    24000000          0     0  50000
       bus-can1                       0        0        0    24000000          0     0  50000
       bus-can0                       0        0        0    24000000          0     0  50000
       bus-i2c3                       0        0        0    24000000          0     0  50000
       bus-i2c2                       0        0        0    24000000          0     0  50000
       bus-i2c1                       0        0        0    24000000          0     0  50000
       bus-i2c0                       0        0        0    24000000          0     0  50000
       bus-uart5                      0        0        0    24000000          0     0  50000
       bus-uart4                      0        0        0    24000000          0     0  50000
       bus-uart3                      0        0        0    24000000          0     0  50000
       bus-uart2                      0        0        0    24000000          0     0  50000
       bus-uart1                      0        0        0    24000000          0     0  50000
       bus-uart0                      1        1        0    24000000          0     0  50000
    cpux                              1        1        0    24000000          0     0  50000
       apb                            0        0        0     6000000          0     0  50000
       axi                            0        0        0    24000000          0     0  50000
    pll-audio1                        0        0        0  3072000000          0     0  50000
       pll-audio1-div5                0        0        0   614400000          0     0  50000
       pll-audio1-div2                0        0        0  1536000000          0     0  50000
    pll-audio0-4x                     0        0        0    49142857          0     0  50000
       i2s2-asrc                      0        0        0    49142857          0     0  50000
       pll-audio0                     0        0        0    12285714          0     0  50000
          audio-codec-adc             0        0        0    12285714          0     0  50000
          audio-codec-dac             0        0        0    12285714          0     0  50000
          dmic                        0        0        0    12285714          0     0  50000
          spdif-tx                    0        0        0    12285714          0     0  50000
          i2s2                        0        0        0    12285714          0     0  50000
          i2s1                        0        0        0    12285714          0     0  50000
          i2s0                        0        0        0    12285714          0     0  50000
       pll-audio0-2x                  0        0        0    24571428          0     0  50000
    pll-ve                            0        0        0   432000000          0     0  50000
       ve                             0        0        0   432000000          0     0  50000
    pll-video1                        0        0        0   297000000          0     0  50000
       pll-video1-4x                  0        0        0  1188000000          0     0  50000
          tcon-tv                     0        0        0  1188000000          0     0  50000
       pll-video1-2x                  0        0        0   594000000          0     0  50000
    pll-video0                        0        0        0   102000000          0     0  50000
       fanout-27m                     0        0        0   102000000          0     0  50000
       tve                            0        0        0   102000000          0     0  50000
       pll-video0-4x                  0        0        0   408000000          0     0  50000
          tcon-lcd0                   0        0        0   408000000          0     0  50000
       pll-video0-2x                  0        0        0   204000000          0     0  50000
          mipi-dsi                    0        0        0   204000000          0     0  50000
    pll-periph0-parent                1        1        0  2400000000          0     0  50000
       pll-periph0-800m               0        0        0   800000000          0     0  50000
       pll-periph0-2x                 3        3        0  1200000000          0     0  50000
          mmc1                        1        1        0   100000000          0     0  50000
          fanout-32k                  1        1        0       32768          0     0  50000
             fanout2-out-clk          0        0        0       32768          0     0  50000
             fanout1-out-clk          1        1        0       32768          0     0  50000
             fanout0-out-clk          0        0        0       32768          0     0  50000
          fanout-16m                  0        0        0    16000000          0     0  50000
          dsp                         0        0        0   600000000          0     0  50000
          csi-top                     0        0        0  1200000000          0     0  50000
          hdmi-cec-32k                0        0        0       32768          0     0  50000
             hdmi-cec                 0        0        0       32768          0     0  50000
          ce                          0        0        0   400000000          0     0  50000
          g2d                         0        0        0  1200000000          0     0  50000
          di                          0        0        0  1200000000          0     0  50000
          de0                         0        0        0   300000000          0     0  50000
          pll-periph0-div3            0        0        0   200000000          0     0  50000
          pll-periph0                 4        4        0   600000000          0     0  50000
             spi0                     1        1        0   100000000          0     0  50000
             fanout-25m               0        0        0    25000000          0     0  50000
             spdif-rx                 0        0        0   600000000          0     0  50000
             emac0-25m                0        0        0   600000000          0     0  50000
             apb0                     3        3        0   100000000          0     0  50000
                fanout-pclk           0        0        0   100000000          0     0  50000
                bus-tzma              0        0        0   100000000          0     0  50000
                bus-tpadc             0        0        0   100000000          0     0  50000
                bus-audio-codec       0        0        0   100000000          0     0  50000
                bus-dmic              0        0        0   100000000          0     0  50000
                bus-spdif             0        0        0   100000000          0     0  50000
                bus-ths               0        0        0   100000000          0     0  50000
                bus-gpadc             0        0        0   100000000          0     0  50000
                bus-ir-tx             0        0        0   100000000          0     0  50000
                bus-iommu             1        1        0   100000000          0     0  50000
                bus-pwm               1        1        0   100000000          0     0  50000
             psi-ahb                  6        6        0   200000000          0     0  50000
                bus-riscv-cfg         0        0        0   200000000          0     0  50000
                bus-dsp-cfg           0        0        0   200000000          0     0  50000
                bus-csi               0        0        0   200000000          0     0  50000
                bus-ledc              0        0        0   200000000          0     0  50000
                bus-tvd-top           0        0        0   200000000          0     0  50000
                bus-tvd               0        0        0   200000000          0     0  50000
                bus-tve-top           0        0        0   200000000          0     0  50000
                bus-tve               0        0        0   200000000          0     0  50000
                bus-tcon-tv           0        0        0   200000000          0     0  50000
                bus-tcon-lcd0         0        0        0   200000000          0     0  50000
                bus-mipi-dsi          0        0        0   200000000          0     0  50000
                bus-hdmi              0        0        0   200000000          0     0  50000
                bus-dpss-top0         0        0        0   200000000          0     0  50000
                bus-lradc             1        1        0   200000000          0     0  50000
                bus-otg               1        1        0   200000000          0     0  50000
                bus-ehci1             0        0        0   200000000          0     0  50000
                bus-ehci0             0        0        0   200000000          0     0  50000
                bus-ohci1             0        0        0   200000000          0     0  50000
                bus-ohci0             0        0        0   200000000          0     0  50000
                bus-emac0             0        0        0   200000000          0     0  50000
                bus-spi1              0        0        0   200000000          0     0  50000
                bus-spi0              1        1        0   200000000          0     0  50000
                bus-mmc2              0        0        0   200000000          0     0  50000
                bus-mmc1              1        1        0   200000000          0     0  50000
                bus-mmc0              0        0        0   200000000          0     0  50000
                bus-dram              1        1        0   200000000          0     0  50000
                bus-dbg               0        0        0   200000000          0     0  50000
                bus-hstimer           0        0        0   200000000          0     0  50000
                bus-spinlock          0        0        0   200000000          0     0  50000
                bus-msgbox2           0        0        0   200000000          0     0  50000
                bus-msgbox1           0        0        0   200000000          0     0  50000
                bus-msgbox0           0        0        0   200000000          0     0  50000
                bus-dma               1        1        0   200000000          0     0  50000
                bus-ve                0        0        0   200000000          0     0  50000
                bus-ce                0        0        0   200000000          0     0  50000
                bus-g2d               0        0        0   200000000          0     0  50000
                bus-di                0        0        0   200000000          0     0  50000
                bus-de0               0        0        0   200000000          0     0  50000
    pll-ddr0                          2        2        0  1584000000          0     0  50000
       dram-clk                       0        0        0  1584000000          0     0  50000
       mbus                           1        1        0   396000000          0     0  50000
          mbus-g2d                    0        0        0   396000000          0     0  50000
          mbus-csi                    0        0        0   396000000          0     0  50000
          mbus-tvin                   0        0        0   396000000          0     0  50000
          mbus-ce                     0        0        0   396000000          0     0  50000
          mbus-ve                     0        0        0   396000000          0     0  50000
          mbus-dma                    1        1        0   396000000          0     0  50000
    pll-cpux                          0        0        0  1008000000          0     0  50000
       riscv                          0        0        0  1008000000          0     0  50000
          riscv-axi                   0        0        0   504000000          0     0  50000
       pll-cpux-div                   0        0        0  1008000000          0     0  50000
    osc12M                            0        0        0    12000000          0     0  50000
       fanout-12m                     0        0        0    12000000          0     0  50000
       usb-ohci1                      0        0        0    12000000          0     0  50000
       usb-ohci0                      0        0        0    12000000          0     0  50000
    dcxo24M-div32k                    0        0        0       32768          0     0  50000

先dump整个时种,发现D1芯片里的PLL特别多,根本不是规格书里说的8个pll,而是至少有10个

离线

#30 2021-05-28 14:58:49

jlau
会员
注册时间: 2018-06-11
已发帖子: 141
积分: 134.5

Re: 全志D1芯片之终极探索

a7是d2, d3的吧

离线

楼主 #31 2021-05-28 18:38:11

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

实现中断驱动,定时器驱动

离线

楼主 #32 2021-05-28 19:59:40

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

D1内存带宽测试

xboot: /# wboxtest benchmark
[benchmark]-[memcmp]
 Bandwidth: 117.588MB/s
[benchmark]-[memcpy]
 Bandwidth: 1.200GB/s
[benchmark]-[memmove]
 Bandwidth: 189.810MB/s
[benchmark]-[memset]
 Bandwidth: 2.457GB/s

离线

楼主 #33 2021-05-30 09:19:06

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

d1spl.zip
一个小型spl测试镜像,可以通过xfel工具上传到sram,然后执行,并在串口输出相关debug信息

xfel上传镜像到sram中并执行操作指令

sudo xfel write 0x20000 output/d1spl.bin;
sudo xfel exec 0x20000;

执行上述指令后,串口输出如下信息:

OK
X
X
X
X
X
X
X
X
X
X
X
X                                                                                 
X                                                                                 
X                                                                                 
X                                                                                 
X                  

这是彻底裸奔的第一步,下一步就可以初始化DDR了。

执行上述指令时,需要将D1置于fel模式,可以按着fel按键开机,就可以自动进入fel模式,或者直接清空flash里面内容。

离线

#34 2021-05-30 10:33:24

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 683
积分: 653.5

Re: 全志D1芯片之终极探索

D1快被扒的裤衩都不剩了。。。

离线

楼主 #35 2021-05-30 10:38:54

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

玄铁扩展了指令集,一些有用的信息
http://crva.ict.ac.cn/crvs2020/index/slides/2-8.pdf

-MCFLAGS                := -march=rv64imafdc -mabi=lp64d -mcmodel=medany
+MCFLAGS                := -march=rv64gcvxthead -mabi=lp64d -mcmodel=medany

也不是非得用官方编译器,标准编译器也是可以正常工作的,只不过扩展指令就别指望能用上了。

离线

楼主 #36 2021-05-30 12:13:56

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

已实现DDR初始化

DRAM only have internal ZQ!!
get_pmu_exist() = 4294967295
ddr_efuse_type: 0x0
[AUTO DEBUG] two rank and full DQ!
ddr_efuse_type: 0x0
[AUTO DEBUG] rank 0 row = 15 
[AUTO DEBUG] rank 0 bank = 8 
[AUTO DEBUG] rank 0 page size = 2 KB 
[AUTO DEBUG] rank 1 row = 15 
[AUTO DEBUG] rank 1 bank = 8 
[AUTO DEBUG] rank 1 page size = 2 KB 
rank1 config same as rank0
DRAM BOOT DRIVE INFO: %s
DRAM CLK = 792 MHz
DRAM Type = 3 (2:DDR2,3:DDR3)
DRAMC ZQ value: 0x7b7bfb
DRAM ODT value: 0x42.
ddr_efuse_type: 0x0
DRAM SIZE =1024 M
DRAM simple test OK.
ok 1024
OK
X
X
X
X

离线

楼主 #37 2021-05-30 20:26:21

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

XFEL已支持D1芯片的DDR初始化

仅需执行如下指令即可初始化DDR,支持DDR3以及LPDDR3的初始化。

sudo xfel ddr ddr3
xfel ddr ddr3	- Initial ddr controller with ddr3
xfel ddr lpddr3	- Initial ddr controller with lpddr3

执行这条指令后,串口会输出如下信息:

get_pmu_exist() = 4294967295
ddr_efuse_type: 0x0
[AUTO DEBUG] two rank and full DQ!
ddr_efuse_type: 0x0
[AUTO DEBUG] rank 0 row = 15 
[AUTO DEBUG] rank 0 bank = 8 
[AUTO DEBUG] rank 0 page size = 2 KB 
[AUTO DEBUG] rank 1 row = 15 
[AUTO DEBUG] rank 1 bank = 8 
[AUTO DEBUG] rank 1 page size = 2 KB 
rank1 config same as rank0
DRAM BOOT DRIVE INFO: %s
DRAM CLK = 792 MHz
DRAM Type = 3 (2:DDR2,3:DDR3)
DRAMC ZQ value: 0x7b7bfb
DRAM ODT value: 0x42.
ddr_efuse_type: 0x0
DRAM SIZE =1024 M
DRAM simple test OK.

有了xfel,裸奔已经没有任何难度了。
下面就看大家各显神通了。

离线

楼主 #38 2021-05-30 20:41:03

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

到这里,xboot就可以直接运行在ram中,无需uboot支持了

执行如下指令:

sudo xfel ddr ddr3
sudo xfel write 0x40000000 output/xboot.bin
sudo xfel exec 0x40000000

离线

楼主 #39 2021-05-31 19:16:07

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

去知乎开了个专栏,广而告之。
https://www.zhihu.com/column/c_1382754923101081600

离线

#40 2021-06-05 20:01:40

拉轰的脚踏车
会员
注册时间: 2020-03-20
已发帖子: 240
积分: 196

Re: 全志D1芯片之终极探索

xboot 说:
cat /proc/cpuinfo 
processor       : 0
hart            : 0
isa             : rv64imafdcv[b]u[/b]
mmu             : sv39

RISCV核支持的扩展,以及mmu信息

请问这个 U 是代表什么意思?

QQ图片20210605200120.png

离线

楼主 #41 2021-06-07 13:52:26

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

u可能是玄铁自己的扩展吧,具体是什么就不得而知了。在玄铁工具链里可以添加xthead标志生成玄铁扩展的指令集。

-MCFLAGS                := -march=rv64imafdc -mabi=lp64d -mcmodel=medany
+MCFLAGS                := -march=rv64gcvxthead -mabi=lp64d -mcmodel=medany

离线

#42 2021-06-07 13:57:52

cube
会员
注册时间: 2021-03-11
已发帖子: 52
积分: 28

Re: 全志D1芯片之终极探索

@xboot
请问xfel支持 spi nand/nor 读写了吗?

离线

楼主 #43 2021-06-07 17:27:36

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

spi nor及 spi nand的支持正在开发,计划先支持spi nor flash的烧写,spi nand的后延,现在底层spi接口,已支持F1C100S,V3S, V831, H3这四个芯片,D1暂未实现,一切都会有的,需要时间。。。

离线

楼主 #44 2021-06-07 18:08:10

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

XFEL工具,在理论上,全志全系列芯片都是可以支持的,因全志芯片太多,个人也不可能拥有所有芯片的开发板,这里也只能借助大家的力量,欢迎大家踊跃pull request,以支持更多的芯片。

这里说明一下,如何支持一款芯片,以A40I为例,首先,在chips目录下创建一个名为a40i的文件,里面主要是实现struct chip_t这个结构,这些回调函数可以直接return 0,这个代表某个具体的指令不支持而已,但读写sram等都是可以的,这个支持由fel协议来实现的,具体的芯片不需做任何适配。

#include <fel.h>

static int chip_reset(struct xfel_ctx_t * ctx)
{
	return 0;
}

static int chip_sid(struct xfel_ctx_t * ctx, uint32_t * sid)
{
	return 0;
}

static int chip_jtag(struct xfel_ctx_t * ctx)
{
	return 0;
}

static int chip_ddr(struct xfel_ctx_t * ctx, const char * type)
{
	return 0;
}

static int chip_spi_init(struct xfel_ctx_t * ctx)
{
	return 0;
}

static int chip_spi_exit(struct xfel_ctx_t * ctx)
{
	return 0;
}

static int chip_spi_select(struct xfel_ctx_t * ctx)
{
	return 0;
}

static int chip_spi_deselect(struct xfel_ctx_t * ctx)
{
	return 0;
}

static int chip_spi_xfer(struct xfel_ctx_t * ctx, void * txbuf, uint32_t txlen, void * rxbuf, uint32_t rxlen)
{
	return 0;
}

struct chip_t a40i = {
	.name = "A40I",
	.id = 0x00170100,
	.reset = chip_reset,
	.sid = chip_sid,
	.jtag = chip_jtag,
	.ddr = chip_ddr,
	.spi_init = chip_spi_init,
	.spi_exit = chip_spi_exit,
	.spi_select = chip_spi_select,
	.spi_deselect = chip_spi_deselect,
	.spi_xfer = chip_spi_xfer,
};

添加了a40i这个文件后,别忘记将这个加入到支持的芯片列表里,加入时按名字排序即可

extern struct chip_t a40i;
extern struct chip_t d1;
extern struct chip_t f1c100s;
extern struct chip_t h3;
extern struct chip_t r329;
extern struct chip_t t507;
extern struct chip_t v3s;
extern struct chip_t v831;

static struct chip_t * chips[] = {
	&a40i,
	&d1,
	&f1c100s,
	&h3,
	&r329,
	&t507,
	&v3s,
	&v831,
};

这样提交后,xfel就支持了一款全志的新芯片了,当然很多高阶功能都是赞未实现的,这个也无关仅要,慢慢完善就可以了。

这里有个最关键的ID信息,需要填准确,这个获取很容易,将你的板子上电并进入芯片的fel模式,然后执行如下指令

sudo xfel version

此时终端会反馈一串芯片信息,其中的soc字段就是芯片的id,十六进制方式表达。

AWUSBFEX soc=0x00170100(A40I) 0x00000001 ver=0x0001 0x44 0x08 scratchpad=0x00007e00

支持一个新芯片是不是很简单呢,如果你手上有xfel还未支持的芯片,不妨按这个流程操作下,并pull request,争取能将xfel变成全志芯片裸机开发的瑞士军刀。

离线

楼主 #45 2021-06-13 01:42:53

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

重新架构xfel工具的spi接口,采用命令队列方式,现在写入速度正常了,由原先的1.7KB/S提升到80KB/S,基本达到实用的程度了。

100% [================================================]  1049 kB,   81.0 kB/s 
100% [================================================]  1049 kB,  184.4 kB/s 

上面是的V831 spi nor flash的写入速度,下面是读速度。

离线

楼主 #46 昨天 00:08:45

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

xfel现已支持D1芯片SPI NOR FLASH的读写

100% [================================================]  1049 kB,  108.8 kB/s 
100% [================================================]  1049 kB,  383.4 kB/s 

上面是SPI NOR FLASH写入速度,下面是读速度。

离线

楼主 #47 今天 09:27:29

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 全志D1芯片之终极探索

现在xfel已支持F1C100S,V3S, V831, H3,D1这5个芯片的nor flash烧写,linux版就直接下载源码,自己编译就行,windows版工具,可以直接下载晕哥的,https://whycan.com/viewtopic.php?pid=64570#p64570

对于全志全系列芯片支持,这个还得靠大家一起努力,欢迎pull request,看到哪里缺了,手上又有现成开发板就顺手支持下,添加芯片的支持参考上面的帖子。为了提升烧录速度,接口有些变化,但大同小异,照着抄,就行了。

sunxi-fel工具至少是无法同时支持V3S以及F1C100S这两个芯片,这一点xfel做到了,而且还能支持RISCV平台,所以全系列芯片的支持,是完全可能的。

最近编辑记录 xboot (今天 09:29:39)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn