Git Product home page Git Product logo

xfel's Introduction

xboot-logo


XBOOT简介(English Version)

       _                   _                     
 _  _ | |___ _____ _____ _| |_                   
\ \/ /|  _  |  _  |  _  |_   _|  (C) 2007-2023   
 )  ( | |_| | |_| | |_| | | |____JIANJUN.JIANG__ 
/_/\_\|_____|_____|_____| |_____________________|

操作一个GPIO,需要仔细对照芯片手册,好繁琐;每换一个主控芯片,所有工作从头来过;想开发个现代点支持各种动效的UI,发现几乎是不可能的事情;各种协议栈有如天书一样,阅读都困难,何谈编写;虚拟机技术很流行,功能很强大,想自己移植个,可是困难重重;还是放开自己吧,让XBOOT来替你解决这些问题。XBOOT不仅仅是一款功能强大、可移植性强、代码复用率高的嵌入式系统bootloader,而且还是一款SOC片上系统应用软件执行引擎,无需复杂的操作系统,APP上电直接执行。一次编写,到处运行,不仅仅是个口号,而且还是XBOOT存在的唯一原因。一些基本特性,简单列举如下:

  • 支持文件系统
  • 支持lua虚拟机
  • 支持各种协议栈
  • 支持矢量图形库,矢量字体
  • 支持各种现代GUI控件,以及动效
  • 多平台支持
  • 各种总线驱动,UART,I2C,SPI等等
  • 各种设备驱动,GPIO,PWM,IRQ,CLK,LED,BUZZER,VIBRATOR,WATCHDOG,RNG,FRAMEBUFFER,RTC等
  • 支持用lua编写应用软件,包含高等级API,可直接操作各种硬件抽象接口
  • 应用软件平台无关,一次编写,到处运行

linux-sandbox-game-2048

文档及开发工具

编译源码

Makefile中有两个变量在编译时需要传递,一个是交叉工具链,另一个是具体的硬件平台

变量 说明
CROSS_COMPILE 指定交叉工具链
PLATFORM 指定硬件平台,由两部分组成,archmach
  • Realview平台,qemu-system-arm模拟器

make clean
make CROSS_COMPILE=/path/to/arm-none-linux-gnueabihf- PLATFORM=arm32-realview
  • X86_64位linux系统下的sandbox

sandbox依赖与SDL2库,在编译前需要安装libsdl2-dev,以ubuntu系统为例:

sudo apt-get install libsdl2-dev
make clean
make CROSS_COMPILE="" PLATFORM=x64-sandbox

讨论组,大佬聚集,请踊跃加入

XBOOT官方QQ群:658250248 (2000人)


Xboot Introduction

It very tedious that we need careful read soc datasheet when operate GPIO on soc.We always repeat working when changed the soc.its almost almost impossible to We want develop a UI that support all kinds of magic motion.Stacks of protocols are like heavenly books ,it Reading is very hard , How do we program? Virtual machine technology is very popular and it function is powerful,but it very difficult to transplant it.so we build the Xboot.it can help us deal with these problems. XBOOT is not only a powerful, portable, and highly reusable, embedded system bootloader,but also on a piece of SOC system application software execution engine, without complex operating system, electricity directly executed on the APP。"Once written, running everywhere." It not just a slogan,but also the only reason for the existence of XBOOT. What's on the XBOOT?

  • Support file systems
  • Support lua virtual machine
  • Support many protocol stacks
  • Support graphics library, and vector font
  • Supports a modern GUI, and animations
  • Multi-platform support
  • Bus drivers, UART, I2C, SPI and so on
  • Device drivers, GPIO, PWM, IRQ, CLK, LED, BUZZER, VIBRATOR, WATCHDOG, RNG, FRAMEBUFFER, RTC, etc.
  • Support application using lua, which include high-level API, can operate a variety of hardware abstract interface directly
  • Application software platform has nothing to do, write once, run everywhere

Documents and Development Tools

Compile The Source Code

Makefile have two variables need to pass, one is cross toolchain, the other is a specific hardware platform

variable Description
CROSS_COMPILE The specical cross toolchain
PLATFORM The hardware platform, have two parts, arch and mach
  • Realview Platform,qemu-system-arm Emulator

make clean
make CROSS_COMPILE=/path/to/arm-none-linux-gnueabihf- PLATFORM=arm32-realview
  • Linux Sandbox On X86_64

The sandbox depends on the SDL2 library, you need to install libsdl2-dev before compile, as an example at the ubuntu system:

sudo apt-get install libsdl2-dev
make clean
make CROSS_COMPILE="" PLATFORM=x64-sandbox

Discussion Group, Many Big Brother, Please Join Us

XBOOT Official Tencent QQ Group: 658250248 (2000 people)

xfel's People

Contributors

aozima avatar duskmoon314 avatar gerrywangqd avatar imi415 avatar jianjunjiang avatar kunyi avatar mollysophia avatar newluhux avatar rampageservices avatar sphw avatar t123yh avatar taotieren avatar versaloon avatar willswang avatar ytf4425 avatar yuzukitsuru avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xfel's Issues

ERROR: Can't found any FEL device

执行时找不到设备

mod@archlinux xfel git:[master] $ ./xfel version
ERROR: Can't found any FEL device

下面的结果返回NULL
ctx.hdl = libusb_open_device_with_vid_pid(NULL, 0x1f3a, 0xefe8);

查看usb设备是存在的

mod@archlinux xfel git:[master] $ lsusb
Bus 001 Device 002: ID 8087:8001 Intel Corp. Integrated Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 003: ID 04f2:b502 Chicony Electronics Co., Ltd Integrated Camera
Bus 002 Device 002: ID 8087:07dc Intel Corp. Bluetooth wireless interface
Bus 002 Device 008: ID 1f3a:efe8 Allwinner Technology sunxi SoC OTG connector in FEL/flashing mode
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

平台:
archlinux
libusb 1.0.24-2: https://archlinux.org/packages/core/x86_64/libusb/

How to tranfer binary from payolads to code

Hi!

I'm need to make some change in payloads for r528_t113 SPI. I'm make binary but how to remake corresponding C file in chips dir (r528_t113.c)? I'm talk about this section:

static int chip_spi_init(struct xfel_ctx_t * ctx, uint32_t * swapbuf, uint32_t * swaplen, uint32_t * cmdlen)
{
        static const uint8_t payload[] = {
                0x00, 0x00, 0xa0, 0xe3, 0x17, 0x0f, 0x08, 0xee, 0x15, 0x0f, 0x07, 0xee,
                0xd5, 0x0f, 0x07, 0xee, 0x9a, 0x0f, 0x07, 0xee, 0x95, 0x0f, 0x07, 0xee,
                0xff, 0xff, 0xff, 0xea, 0x5c, 0x00, 0x9f, 0xe5, 0x00, 0xd0, 0x80, 0xe5,
...

Tnx

xfel无法找到FEL设备

你好,大佬,我想咨询一个xfel在哪吒D1 C906上无法找到 FEL device的问题的问题。
我在虚拟机ubuntu14.04下按照xfel的步骤安装了xfel,之后按住开发板上的fel键再上电,使用xfel的时候出现这个错误:ERROR:Can’t found any FEL device。
我尝试过这些方法:1.在win10下使用windows版本的xfel,也是一样的报错。2.重新安装xfel。   3.重新安装串口驱动。
image

BROM firmware source code

Hello! I'm using MQ-Pro which uses the D1 chip and it works great with xfel so thank you for a great project! I'm wondering if source code for the firmware that xfel communicates with is available somewhere. I'd like to understand better how it works. Of course I can dump the assembly starting at 0x0, but it doesn't have any symbol information, and it looks like it's using undocumented memory regions such as 0x70005e0. Thanks!

连接d1-h开发板执行xfel ddr ddr3报错

平台:Mac OS X
版本:git clone 当前(2022-06-12)最新版
如题:
./xfel ddr ddr3
xfel ddr d1 - Initial ddr controller for D1
xfel ddr f133 - Initial ddr controller for F133
Failed to initial ddr controller

./xfel version执行结果:
./xfel version
AWUSBFEX ID=0x00185900(D1/F133) dflag=0x44 dlength=0x08 scratchpad=0x00045000

是我命令使用错误吗?

spi at t113-s3/D1s

I propose two changes:

  1. slow SPI speed (50 MHz too fast sometimes).
  2. Add wait for clear start transfer bit before FIFO level check (required in user manual).
    image

xfel on XuanTie C906 RISC-V

用xfel时,将写入内存的文件读出后,发现和写入的有一定的区别,导致写入后的bin文件无法执行(不知道是不是我哪里做错了,麻烦看一下

problem

How to execute binaries?

Hi guys,

Thanks for the work on this tool.
I am trying touse xfel for loading manually the binaries built for the D1 into RAM, building opensbi, u-boot, etc, manually. When I run:
./xfel exec 0x40000000 BINARY

I just don't see anything happen, nothing printed in the serial port and no response to xfel anymore.
I've tried the full 'u-boot.toc1' full binary or loading and running openSBI, u-boot and u-boot DTB binaries directly and it's always the same result.
Can you tell me what I could be doing wrong?

Thanks

Error: usb bulk send error (operation timed out)

I tried to write a binary to an R528 board and encountered a usb bulk send error. To know what happened, I modified the source code to print the error message.

I execute commands like below:

> xfel version
AWUSBFEX ID=0x00185900(R528/T113) dflag=0x44 dlength=0x08 scratchpad=0x00045000
> xfel ddr r528-s3
Initial ddr controller succeeded
> xfel write 0x80000000 target/armv7a-none-eabi/debug/blink.bin
usb bulk send error: Operation timed out

In addition, I can use xfel to write binary to D1S board.

What could be causing this error? How do I fix it?


我尝试向R528的板子写入二进制文件,但遇到了usb bulk send error。我修改了源代码来尝试找出问题,下面是我执行的命令:

# 如上

另,我可以使用xfel来向D1S写入二进制文件。

可能是什么导致的?如何解决呢?

support for MX35LF2GE4AD

Currently, this is what I get on my Nezha board:

$ xfel version
AWUSBFEX soc=0x00185900(D1) 0x00000001 ver=0x0001 0x44 0x08 scratchpad=0x00045000
$ xfel sid
d0001200c8145c14558181811ac82ccb
$ xfel spinand
Not found any spi nand flash
$ xfel spinor
The spi nor flash '0xffc226' is not yet supported
Not found any spi nor flash

I think it is actually a NAND though, as per
https://www.mxic.com.tw/en-us/products/NAND-Flash/Serial-NAND-Flash/Pages/spec.aspx?p=MX35LF2GE4AD&m=Serial+NAND&n=PM2794 (I read the name from the chip itself).

SPI nand write not enabling ECC.

SPI chip is W25N01GV
Data is correctly read and written, but it seems the somehow the ECC (OOB area) is not being generated, breaking the filesystem.
I've played with the code, and ECC-E bit (Status-2 register) is actually enabled.
In the end I modified it further for my needings, disabling ECC and reading/writing raw 2112-byte pages.

ERROR: Can't connect to device: -3

当我尝试执行xfel.exe version时它报错了:
ERROR: Can't connect to device: -3
ERROR: Can't found any FEL device

在Windows上执行的,驱动已经安装了,芯片是V851se

xfel擦除对齐地址时会多擦除一个扇区

使用xfel擦除(nor)和烧写(nor)地址容量都是对齐时,会多擦除一个扇区,这样会擦除掉后面的分区数据:

xfel spinor erase 0x00 0x00200000
100% [================================================] 2.004 MB, 343.741 KB/s
xfel spinor erase 0x00 0x00100000
100% [================================================] 1.004 MB, 336.865 KB/s
xfel spinor erase 0x00 0x0080000
100% [================================================] 516.000 KB, 327.770 KB/s

目前擦除(856行)和烧写(916行)的容量计算为:

cnt = ((addr & emask) + len + esize) & ~emask;  // 计算对齐的地址和容量时,会多计算一个<esize>

是否可以改为:

cnt = ((addr & emask) + len + esize - 1) & ~emask; 

w25q64jvsiq issue on MangoPi MQ-R (F133-A)

SPI: winbond w25q64jvsiq

Here are the steps tested on MangoPi MQ-R (F133-A)

$ ./xfel spinor
Found spi nor flash 'SFDP' with 8388608 bytes
$ ./xfel spinor write 0 ../main.bin
100% [================================================] 16.000 KB, 172.406 KB/s        
$ ./xfel spinor read 0 1000 /tmp/r.bin
100% [================================================] 1000.000 B, 57.249 KB/s

/tmp/r.bin

00000000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  ................
00000010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  ................

any suggestion ?
thanks in advance :)

下载特定文件出现usb bulk send error错误

我用xfel烧写T113-S3的SPI NAND FLASH出现,只要烧写一个特定的dtb文件就会出现usb bulk send error,这个错误与烧写的地址无关,烧写其他文件都可以,只有烧写这特定文件才会出现,我换了两种开发板,现象是一至的。
这就是那个会导致错误的文件board.dtb.gz

AUR xfel 包

AUR xfel-git

PKGBUILD

# Maintainer: taotieren <[email protected]>

pkgname=xfel-git
pkgver=eb5f578
pkgrel=1
pkgdesc="Tiny FEL tools for allwinner SOC, support RISC-V D1 chip."
arch=('any')
url="https://github.com/xboot/xfel"
license=('MIT')
provides=(${pkgname})
conflicts=(${pkgname} ${pkgname%-git})
#replaces=(${pkgname})
depends=('libusb')
makedepends=('git')
backup=()
options=('!strip')
#install=${pkgname}.install
source=("${pkgname%-git}::git+${url}.git")
sha256sums=('SKIP')

pkgver() {
    cd "${srcdir}/${pkgname%-git}"
    git describe --always | sed 's|-|.|g'
}

build() {
    cd "${srcdir}/${pkgname%-git}"
    make
}

package() {
    install -Dm755 "${srcdir}/${pkgname%-git}/${pkgname%-git}" "${pkgdir}/usr/bin/${pkgname%-git}"
    install -Dm644 "${srcdir}/${pkgname%-git}/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname%-git}/LICENSE"
}

AUR xfel
PKGBUILD

# Maintainer: taotieren <[email protected]>

pkgname=xfel
pkgver=1.0.1
pkgrel=1
pkgdesc="Tiny FEL tools for allwinner SOC, support RISC-V D1 chip."
arch=('any')
url="https://github.com/xboot/xfel"
license=('MIT')
provides=(${pkgname})
conflicts=(${pkgname} ${pkgname}-git)
#replaces=(${pkgname})
depends=('libusb')
makedepends=()
backup=()
options=('!strip')
#install=${pkgname}.install
source=("${pkgname}-${pkgver}.tar.gz::${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('85b8f1fe6a58149c9eb5c270e279f0dbedb882a349799a70105e4e415182aa9a')

build() {
    cd "${srcdir}/${pkgname}-${pkgver}"
    make
}

package() {
    install -Dm755 "${srcdir}/${pkgname}-${pkgver}/${pkgname}" "${pkgdir}/usr/bin/${pkgname}"
    install -Dm644 "${srcdir}/${pkgname}-${pkgver}/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
}
xfel(v1.0.1) - https://github.com/xboot/xfel
usage:
    xfel help                                   - Print this usage
    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                                    - Show 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

关于多路jtag的问题

比如用在d1上面,d1上面有两路jtag,在我使用sd卡的时候,原有pf脚的jtag就不能用的,必须要用pe脚的去调试,但是xfel默认却只有pf,我自己编了一个pe的,这样调试起来会很顺手,不知道大佬有无这种多路jtag的想法,有的话我就直接pr过来

static const uint8_t pf_payload[] = {
    0x37, 0x03, 0x40, 0x00, 0x73, 0x20, 0x03, 0x7c, 0x37, 0x03, 0x03, 0x00,
    0x1b, 0x03, 0x33, 0x01, 0x73, 0x20, 0x23, 0x7c, 0x6f, 0x00, 0x40, 0x00,
    0x13, 0x01, 0x01, 0xfe, 0x23, 0x34, 0x81, 0x00, 0x23, 0x38, 0x91, 0x00,
    0x23, 0x3c, 0x11, 0x00, 0x13, 0x04, 0x05, 0x00, 0xef, 0x00, 0x40, 0x02,
    0x83, 0x30, 0x81, 0x01, 0x03, 0x34, 0x81, 0x00, 0x83, 0x34, 0x01, 0x01,
    0x13, 0x01, 0x01, 0x02, 0x67, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x02,
    0x03, 0xa7, 0x07, 0x0f, 0xb7, 0x16, 0xff, 0xff, 0x93, 0x86, 0xf6, 0xff,
    0x13, 0x77, 0x07, 0xff, 0x13, 0x67, 0x47, 0x00, 0x23, 0xa8, 0xe7, 0x0e,
    0x03, 0xa7, 0x07, 0x0f, 0x13, 0x77, 0xf7, 0xf0, 0x13, 0x67, 0x07, 0x04,
    0x23, 0xa8, 0xe7, 0x0e, 0x03, 0xa7, 0x07, 0x0f, 0x33, 0x77, 0xd7, 0x00,
    0xb7, 0x46, 0x00, 0x00, 0x33, 0x67, 0xd7, 0x00, 0x23, 0xa8, 0xe7, 0x0e,
    0x03, 0xa7, 0x07, 0x0f, 0xb7, 0x06, 0x10, 0xff, 0x93, 0x86, 0xf6, 0xff,
    0x33, 0x77, 0xd7, 0x00, 0xb7, 0x06, 0x40, 0x00, 0x33, 0x67, 0xd7, 0x00,
    0x23, 0xa8, 0xe7, 0x0e, 0x67, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

static const uint8_t pe_payload[] = {
    0x37, 0x03, 0x40, 0x00, 0x73, 0x20, 0x03, 0x7C, 0x37, 0x03, 0x03, 0x00,
    0x1B, 0x03, 0x33, 0x01, 0x73, 0x20, 0x23, 0x7C, 0x6F, 0x00, 0x40, 0x00,
    0x13, 0x01, 0x01, 0xFE, 0x23, 0x34, 0x81, 0x00, 0x23, 0x38, 0x91, 0x00,
    0x23, 0x3C, 0x11, 0x00, 0x13, 0x04, 0x05, 0x00, 0xEF, 0x00, 0x40, 0x02,
    0x83, 0x30, 0x81, 0x01, 0x03, 0x34, 0x81, 0x00, 0x83, 0x34, 0x01, 0x01,
    0x13, 0x01, 0x01, 0x02, 0x67, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB7, 0x07, 0x00, 0x02,
    0x03, 0xA7, 0x07, 0x0F, 0x13, 0x67, 0xF7, 0x00, 0x23, 0xA8, 0xE7, 0x0E,
    0x03, 0xA7, 0x07, 0x0F, 0x13, 0x67, 0x07, 0x0F, 0x23, 0xA8, 0xE7, 0x0E,
    0x83, 0xA6, 0x07, 0x0F, 0x37, 0x07, 0x10, 0xFF, 0x13, 0x06, 0xF7, 0xFF,
    0x37, 0x17, 0xFF, 0xFF, 0x13, 0x07, 0xF7, 0xFF, 0xB3, 0xF6, 0xE6, 0x00,
    0x37, 0xF7, 0x00, 0x00, 0xB3, 0xE6, 0xE6, 0x00, 0x23, 0xA8, 0xD7, 0x0E,
    0x83, 0xA6, 0x07, 0x0F, 0x37, 0x07, 0xF0, 0x00, 0xB3, 0xF6, 0xC6, 0x00,
    0xB3, 0xE6, 0xE6, 0x00, 0x23, 0xA8, 0xD7, 0x0E, 0x83, 0xA6, 0x07, 0x0C,
    0x37, 0x07, 0xF1, 0xFF, 0x13, 0x07, 0xF7, 0xFF, 0xB3, 0xF6, 0xE6, 0x00,
    0x37, 0x07, 0x07, 0x00, 0xB3, 0xE6, 0xE6, 0x00, 0x23, 0xA0, 0xD7, 0x0C,
    0x03, 0xA7, 0x07, 0x0C, 0xB7, 0x06, 0x70, 0x00, 0x33, 0x77, 0xC7, 0x00,
    0x33, 0x67, 0xD7, 0x00, 0x23, 0xA0, 0xE7, 0x0C, 0x03, 0xA7, 0x07, 0x0C,
    0xB7, 0x06, 0x00, 0xF1, 0x93, 0x86, 0xF6, 0xFF, 0x33, 0x77, 0xD7, 0x00,
    0xB7, 0x06, 0x00, 0x07, 0x33, 0x67, 0xD7, 0x00, 0x23, 0xA0, 0xE7, 0x0C,
    0x03, 0xA7, 0x07, 0x0C, 0xB7, 0x06, 0x00, 0x70, 0x0B, 0x37, 0x07, 0x6C,
    0x33, 0x67, 0xD7, 0x00, 0x23, 0xA0, 0xE7, 0x0C, 0x67, 0x80, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

T113-S3 好像与F133有相同的ID

$ ./xfel.exe version
AWUSBFEX soc=0x00185900(D1/F133) 0x00000001 ver=0x0001 0x44 0x08 scratchpad=0x00045000
$ ./xfel.exe sid
9040630008144c14025261504b6b184b

错误:bulk send error

xfel ddr ddr3
xfel ddr d1 - Initial ddr controller for D1
xfel ddr f133 - Initial ddr controller for F133
Failed to initial ddr controller
xfel write 0x40000000 zcore_d1.bin
usb bulk send error

向D1-H上烧写时报“usb bulk send error”错误,重新编译xfel、重启电脑也都没有解决

usb bulk send error

我写了一段hello world代码,通过xfel烧录到D1开发板上(LicheeRV Dock),我尝试烧录在0x40000000,虽然第一次能正常运行,但第二次执行时出现“usb bulk send error”。

我猜测是不是烧录的地址存在问题,于是修改程序将起始地址改为0x48000000,并在内存地址0x48000000处重新烧录,但也遇到了同样的问题:

image

为什么会出现这个问题呢?

T113-S4 ddr initialization

Hi,

T113-s4 ddr will not initialize with existing T113-s3 code.

Console will read:

[1753]fes begin commit:4d16602
[1755]set pll start
[1757]fix vccio detect value:0xc0
[1764]periph0 has been enabled
[1768]set pll end
[1769][pmu]: bus read error
[1772]board init ok
[1774]beign to init dram
[1776]ZQ value = 0x2f
[1778]get_pmu_exist() = -1
[1780]ddr_efuse_type: 0xa
[1783]trefi:7.8ms
[1785]DX0 state:3
[1787]DX1 state:3
[1789][ERROR DEBUG] auto scan dram rank&width fail !

According to this page, we need to change the ac remapping:
https://bbs.aw-ol.com/topic/4102/%E8%AF%B7%E9%97%AE%E8%B0%81%E6%9C%89aic600e3%E7%9A%84dram%E5%88%9D%E5%A7%8B%E5%8C%96%E4%BB%A3%E7%A0%81/4?lang=en-US

diff --git a/chips/r528_t113.c b/chips/r528_t113.c
index 79159c0..6f85489 100644
--- a/chips/r528_t113.c
+++ b/chips/r528_t113.c
@@ -4283,8 +4283,20 @@ static int chip_ddr(struct xfel_ctx_t * ctx, const char * type)
                                .dram_tpr12 = 0x00000046,
                                .dram_tpr13 = 0x34000100,
                        };
+
+                       // patch if t113-s4 and fuse = 0xa: select ac_remap[0]
+                       //                              switchD_0002bd18::caseD_a                       XREF[1]:     0002bd18(j)
+                       //  0002bd4a 16 22           movs       r2,#0x16
+                       //  0002bd4c 1e a9           add        r1,sp,#0x78   <- points to ac_remap[5] on stack, change to ac_remap[0] on stack (offset 0)
+                       //  0002bd4e eb e7           b          LAB_0002bd28
+                       // after patch
+                       //  0002bd4c 00 a9           add        r1,sp,#0x00
+
+                       uint8_t patch[] = { 0x00, 0xa9 };
+
                        fel_write(ctx, 0x00028000, (void *)&t113_ddr_payload[0], sizeof(t113_ddr_payload));
                        fel_write(ctx, 0x00028038, (void *)&ddr3, sizeof(ddr3));
+                       fel_write(ctx, 0x0002bd4c, (void *)&patch[0], sizeof(patch));
                        fel_exec(ctx, 0x00028000);
                        return 1;
                }

With this patch in place, i can successfully initialize ddr memory.

[2932]fes begin commit:4d16602
[2935]set pll start
[2937]fix vccio detect value:0xc0
[2944]periph0 has been enabled
[2947]set pll end
[2949][pmu]: bus read error
[2952]board init ok
[2953]beign to init dram
[2956]ZQ value = 0x2f
[2958]get_pmu_exist() = -1
[2960]ddr_efuse_type: 0xa
[2963]trefi:7.8ms
[2965][AUTO DEBUG] single rank and full DQ!
[2969]ddr_efuse_type: 0xa
[2971]trefi:7.8ms
[2974][AUTO DEBUG] rank 0 row = 14
[2977][AUTO DEBUG] rank 0 bank = 8
[2980][AUTO DEBUG] rank 0 page size = 2 KB
[2984]DRAM BOOT DRIVE INFO: V0.33
[2987]DRAM CLK = 936 MHz
[2990]DRAM Type = 3 (2:DDR2,3:DDR3)
[2993]DRAMC read ODT  off.
[2995]DRAM ODT value: 0x42.
[2998]ddr_efuse_type: 0xa
[3001]DRAM SIZE =256 M
[3003]dram_tpr4:0x0
[3005]PLL_DDR_CTRL_REG:0xf8004d00
[3008]DRAM_CLK_REG:0xc0000000
[3011][TIMING DEBUG] MR2= 0x20
[3015]DRAM simple test OK.
[3017]rtc standby flag is 0x0, super standby flag is 0x0
[3022]init dram ok

This might help to achieve faster SPI transfer speeds

Hi, based on xfel, I made a program to backup/restore the SPI NAND of a F1C200s-based device (Hantek DSO2C10).
Originally the transfer speeds were very low, about 40KB/s, so 128MB took a very long time.
After analyzing how xfel worked, I made some modifications and was able to read/write to the nand at 300KB/s.

The cmd/swap buffers are very small, so it can't run large queues, requiring a lot of overhead in small packets.
I modified the SPI init to also initialize the SDRAM, and the payload + SPI run function to use the SDRAM address instead the sram buffer at 0x9800.
(This could be done for all SoCs having embedded SDRAM).

Now it's possible to run large command queues and read/write huge data blocks.
For example, this program does:

  • Read 128*2K flash pages, store in SDRAM, then Transfer 128*2K bytes from SDRAM.
  • Transfer 128*2K bytes to SDRAM, then Write 128*2K flash pages from SDRAM.

Though the speed will be still limited to ~100KB/s due the USB speed.
It's possible to set the USB in HS mode, see here.
But doesn't work with xfel write32 0x01c13040 0x29860, getting usb bulk error...
So, I'm using sunxi-fel writel 0x01c13040 0x29860.

It's not in Gihub, but I'm attaching it here.
Due the nature of the program, all the unnecessary code / soc support (Else than for the F1C200s) was removed.

dsoflash-src_cygwin64.zip

Doesn't support A50

I'm trying to access an Allwinner A50 chip and get following message:

WARNING: Not yet support this device ID 0x00175500
ERROR: Can't found any FEL device

lsusb:
Bus 001 Device 004: ID 1f3a:efe8 Allwinner Technology sunxi SoC OTG connector in FEL/flashing mode

Run the newest u-boot + spl from xfel

Hi, I'm following the tutorial on https://linux-sunxi.org/Allwinner_Nezha#Manual_build, where it states that the newest u-boot sources (not yet merged to mainline) don't require boot0 + TOC1. It produces a single binary file, u-boot-sunxi-with-spl.bin with everything integrated.
I built this, and I'm trying to load it to my DongshanPi Nezha STU.
I've tried to load the binary on different memory addresses, even tried to load the spl + opensbi on different memory addresses (guessing the addresses from the original bootlog) but no luck.

This is the stock log:

[57]HELLO! BOOT0 is starting!
[59]BOOT0 commit : 88480af
[62]set pll start
[64]periph0 has been enabled
[67]set pll end
[68][pmu]: bus read error
[70]board init ok
[72]get_pmu_exist() = -1
[74]DRAM BOOT DRIVE INFO: V0.33
[77]DRAM CLK = 792 MHz
[80]DRAM Type = 3 (2:DDR2,3:DDR3)
[83]DRAMC ZQ value: 0x7b7bfb
[85]DRAM ODT value: 0x42.
[88]ddr_efuse_type: 0x0
[91]DRAM SIZE =512 M
[93]dram_tpr4:0x0
[94]PLL_DDR_CTRL_REG:0xf8004100
[97]DRAM_CLK_REG:0xc0000000
[100][TIMING DEBUG] MR2= 0x18
[104]DRAM simple test OK.
[106]dram size =512
[108]spinand UBOOT_START_BLK_NUM 8 UBOOT_LAST_BLK_NUM 32
[114]block from 8 to 32
[172]Check is correct.
[174]dma 0x301a8 int is not used yet
[177]dma 0x301a8 int is free, you do not need to free it again
[183]Entry_name        = opensbi
[186]Entry_name        = u-boot
[189]Entry_name        = dtb
[192]Jump to second Boot.

OpenSBI auto-t113-linux-V0.8-2-g053d088
   ____                    _____ ____ _____
  / __ \                  / ____|  _ \_   _|
 | |  | |_ __   ___ _ __ | (___ | |_) || |
 | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
 | |__| | |_) |  __/ | | |____) | |_) || |_
  \____/| .__/ \___|_| |_|_____/|____/_____|
        | |
        |_|

Platform Name          : T-HEAD Xuantie Platform
Platform HART Features : RV64ACDFIMSUVX
Platform Max HARTs     : 1
Current Hart           : 0
Firmware Base          : 0x41fc0400
Firmware Size          : 75 KB
Runtime SBI Version    : 0.2

MIDELEG : 0x0000000000000222
MEDELEG : 0x000000000000b1ff
PMP0    : 0x0000000041fc0000-0x0000000041fdffff (A)
PMP1    : 0x0000000040000000-0x000000007fffffff (A,R,W,X)
PMP2    : 0x0000000080000000-0x00000000bfffffff (A,R,W,X)
PMP3    : 0x0000000000020000-0x0000000000027fff (A,▒

U-Boot 2018.05-g24521d6 (Feb 11 2022 - 08:52:39 +0000) Allwinner Technology

does this boot log say something important? can we guess any addresses? I thought opensbi would load at 0x41fc0000, per other examples where they load the opensbi at an address, but the "Firmware Base" ended up +0x400 from this address.

What are the xfel commands I should run to load spl/opensbi/uboot with it?

The version that xfel reports about this chip is:

$ xfel version
AWUSBFEX ID=0x00185900(D1/F133) dflag=0x44 dlength=0x08 scratchpad=0x00045000

[编译错误] 发行版本内缺少相关文件

在最新的 v1.2.0 和 v1.2.1 发行版中,使用源码编译发现发行版包内缺少文件。详细如下
v1.2.0

➜  xfel-1.2.0 git:(master) ✗ tree
.
├── 99-xfel.rules
├── LICENSE
├── Makefile
├── README.md
├── chips
│   ├── a10.c
│   ├── a13_a10s_r8.c
│   ├── a20.c
│   ├── a23.c
│   ├── a31.c
│   ├── a33_r16.c
│   ├── a40i_r40.c
│   ├── a64.c
│   ├── a80.c
│   ├── a83t.c
│   ├── d1_f133.c
│   ├── f1c100s_f1c200s_f1c500s.c
│   ├── h2_h3.c
│   ├── h5.c
│   ├── h6.c
│   ├── h616.c
│   ├── r328.c
│   ├── r329.c
│   ├── t507.c
│   ├── v3s_s3.c
│   └── v831.c
├── fel.c
├── fel.h
├── main.c
└── payloads
    ├── d1_f133
    │   ├── ddr
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── d1
    │   │   │   │   └── reg-ccu.h
    │   │   │   ├── endian.h
    │   │   │   ├── io.h
    │   │   │   ├── linkage.h
    │   │   │   ├── riscv64.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── mctl_hal.S
    │   │       ├── memcpy.S
    │   │       ├── memset.S
    │   │       ├── start.S
    │   │       ├── sys-clock.c
    │   │       ├── sys-dram.c
    │   │       └── sys-uart.c
    │   ├── jtag
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── d1
    │   │   │   │   └── reg-ccu.h
    │   │   │   ├── endian.h
    │   │   │   ├── io.h
    │   │   │   ├── linkage.h
    │   │   │   ├── riscv64.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── start.S
    │   │       └── sys-jtag.c
    │   └── spi
    │       ├── Makefile
    │       ├── include
    │       │   ├── byteorder.h
    │       │   ├── d1
    │       │   │   └── reg-ccu.h
    │       │   ├── endian.h
    │       │   ├── io.h
    │       │   ├── linkage.h
    │       │   ├── riscv64.h
    │       │   ├── stdarg.h
    │       │   ├── stddef.h
    │       │   ├── stdint.h
    │       │   ├── string.h
    │       │   ├── types.h
    │       │   └── xboot.h
    │       ├── link.ld
    │       └── source
    │           ├── start.S
    │           └── sys-spi.c
    ├── f1c100s_f1c200s_f1c500s
    │   ├── ddr
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── endian.h
    │   │   │   ├── f1c100s
    │   │   │   │   ├── reg-ccu.h
    │   │   │   │   └── reg-dram.h
    │   │   │   ├── io.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── memcpy.S
    │   │       ├── memset.S
    │   │       ├── start.S
    │   │       ├── sys-clock.c
    │   │       ├── sys-dram.c
    │   │       └── sys-uart.c
    │   ├── jtag
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── endian.h
    │   │   │   ├── f1c100s
    │   │   │   │   ├── reg-ccu.h
    │   │   │   │   └── reg-dram.h
    │   │   │   ├── io.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── start.S
    │   │       └── sys-jtag.c
    │   └── spi
    │       ├── Makefile
    │       ├── include
    │       │   ├── byteorder.h
    │       │   ├── endian.h
    │       │   ├── f1c100s
    │       │   │   ├── reg-ccu.h
    │       │   │   └── reg-dram.h
    │       │   ├── io.h
    │       │   ├── stdarg.h
    │       │   ├── stddef.h
    │       │   ├── stdint.h
    │       │   ├── string.h
    │       │   ├── types.h
    │       │   └── xboot.h
    │       ├── link.ld
    │       └── source
    │           ├── start.S
    │           └── sys-spi.c
    ├── h2_h3
    │   ├── h2-ddr
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── endian.h
    │   │   │   ├── h2
    │   │   │   │   ├── reg-ccu.h
    │   │   │   │   └── reg-dram.h
    │   │   │   ├── io.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── memcpy.S
    │   │       ├── memset.S
    │   │       ├── start.S
    │   │       ├── sys-clock.c
    │   │       ├── sys-dram.c
    │   │       └── sys-uart.c
    │   ├── h3-ddr
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── endian.h
    │   │   │   ├── h3
    │   │   │   │   ├── reg-ccu.h
    │   │   │   │   └── reg-dram.h
    │   │   │   ├── io.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── memcpy.S
    │   │       ├── memset.S
    │   │       ├── start.S
    │   │       ├── sys-clock.c
    │   │       ├── sys-dram.c
    │   │       └── sys-uart.c
    │   ├── jtag
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── endian.h
    │   │   │   ├── h3
    │   │   │   │   ├── reg-ccu.h
    │   │   │   │   └── reg-dram.h
    │   │   │   ├── io.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── start.S
    │   │       └── sys-jtag.c
    │   └── spi
    │       ├── Makefile
    │       ├── include
    │       │   ├── byteorder.h
    │       │   ├── endian.h
    │       │   ├── h3
    │       │   │   ├── reg-ccu.h
    │       │   │   └── reg-dram.h
    │       │   ├── io.h
    │       │   ├── stdarg.h
    │       │   ├── stddef.h
    │       │   ├── stdint.h
    │       │   ├── string.h
    │       │   ├── types.h
    │       │   └── xboot.h
    │       ├── link.ld
    │       └── source
    │           ├── start.S
    │           └── sys-spi.c
    └── v3s_s3
        ├── jtag
        │   ├── Makefile
        │   ├── include
        │   │   ├── byteorder.h
        │   │   ├── endian.h
        │   │   ├── io.h
        │   │   ├── stdarg.h
        │   │   ├── stddef.h
        │   │   ├── stdint.h
        │   │   ├── string.h
        │   │   ├── types.h
        │   │   ├── v3s
        │   │   │   ├── reg-ccu.h
        │   │   │   └── reg-dram.h
        │   │   └── xboot.h
        │   ├── link.ld
        │   └── source
        │       ├── start.S
        │       └── sys-jtag.c
        └── s3-ddr
            ├── Makefile
            ├── include
            │   ├── byteorder.h
            │   ├── endian.h
            │   ├── io.h
            │   ├── s3
            │   │   ├── reg-ccu.h
            │   │   └── reg-dram.h
            │   ├── stdarg.h
            │   ├── stddef.h
            │   ├── stdint.h
            │   ├── string.h
            │   ├── types.h
            │   └── xboot.h
            ├── link.ld
            └── source
                ├── memcpy.S
                ├── memset.S
                ├── start.S
                └── sys-clock.c

54 directories, 230 files

v1.2.1

➜  xfel-1.2.1 git:(master) ✗ tree     
.
├── 99-xfel.rules
├── LICENSE
├── Makefile
├── README.md
├── chips
│   ├── a10.c
│   ├── a13_a10s_r8.c
│   ├── a20.c
│   ├── a23.c
│   ├── a31.c
│   ├── a33_r16.c
│   ├── a40i_r40.c
│   ├── a64.c
│   ├── a80.c
│   ├── a83t.c
│   ├── d1_f133.c
│   ├── f1c100s_f1c200s_f1c500s.c
│   ├── h2_h3.c
│   ├── h5.c
│   ├── h6.c
│   ├── h616.c
│   ├── r328.c
│   ├── r329.c
│   ├── t507.c
│   ├── v3s_s3.c
│   └── v831.c
├── fel.c
├── fel.h
├── main.c
└── payloads
    ├── d1_f133
    │   ├── ddr
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── d1
    │   │   │   │   └── reg-ccu.h
    │   │   │   ├── endian.h
    │   │   │   ├── io.h
    │   │   │   ├── linkage.h
    │   │   │   ├── riscv64.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── mctl_hal.S
    │   │       ├── memcpy.S
    │   │       ├── memset.S
    │   │       ├── start.S
    │   │       ├── sys-clock.c
    │   │       ├── sys-dram.c
    │   │       └── sys-uart.c
    │   ├── jtag
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── d1
    │   │   │   │   └── reg-ccu.h
    │   │   │   ├── endian.h
    │   │   │   ├── io.h
    │   │   │   ├── linkage.h
    │   │   │   ├── riscv64.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── start.S
    │   │       └── sys-jtag.c
    │   └── spi
    │       ├── Makefile
    │       ├── include
    │       │   ├── byteorder.h
    │       │   ├── d1
    │       │   │   └── reg-ccu.h
    │       │   ├── endian.h
    │       │   ├── io.h
    │       │   ├── linkage.h
    │       │   ├── riscv64.h
    │       │   ├── stdarg.h
    │       │   ├── stddef.h
    │       │   ├── stdint.h
    │       │   ├── string.h
    │       │   ├── types.h
    │       │   └── xboot.h
    │       ├── link.ld
    │       └── source
    │           ├── start.S
    │           └── sys-spi.c
    ├── f1c100s_f1c200s_f1c500s
    │   ├── ddr
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── endian.h
    │   │   │   ├── f1c100s
    │   │   │   │   ├── reg-ccu.h
    │   │   │   │   └── reg-dram.h
    │   │   │   ├── io.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── memcpy.S
    │   │       ├── memset.S
    │   │       ├── start.S
    │   │       ├── sys-clock.c
    │   │       ├── sys-dram.c
    │   │       └── sys-uart.c
    │   ├── jtag
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── endian.h
    │   │   │   ├── f1c100s
    │   │   │   │   ├── reg-ccu.h
    │   │   │   │   └── reg-dram.h
    │   │   │   ├── io.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── start.S
    │   │       └── sys-jtag.c
    │   └── spi
    │       ├── Makefile
    │       ├── include
    │       │   ├── byteorder.h
    │       │   ├── endian.h
    │       │   ├── f1c100s
    │       │   │   ├── reg-ccu.h
    │       │   │   └── reg-dram.h
    │       │   ├── io.h
    │       │   ├── stdarg.h
    │       │   ├── stddef.h
    │       │   ├── stdint.h
    │       │   ├── string.h
    │       │   ├── types.h
    │       │   └── xboot.h
    │       ├── link.ld
    │       └── source
    │           ├── start.S
    │           └── sys-spi.c
    ├── h2_h3
    │   ├── h2-ddr
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── endian.h
    │   │   │   ├── h2
    │   │   │   │   ├── reg-ccu.h
    │   │   │   │   └── reg-dram.h
    │   │   │   ├── io.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── memcpy.S
    │   │       ├── memset.S
    │   │       ├── start.S
    │   │       ├── sys-clock.c
    │   │       ├── sys-dram.c
    │   │       └── sys-uart.c
    │   ├── h3-ddr
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── endian.h
    │   │   │   ├── h3
    │   │   │   │   ├── reg-ccu.h
    │   │   │   │   └── reg-dram.h
    │   │   │   ├── io.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── memcpy.S
    │   │       ├── memset.S
    │   │       ├── start.S
    │   │       ├── sys-clock.c
    │   │       ├── sys-dram.c
    │   │       └── sys-uart.c
    │   ├── jtag
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── endian.h
    │   │   │   ├── h3
    │   │   │   │   ├── reg-ccu.h
    │   │   │   │   └── reg-dram.h
    │   │   │   ├── io.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── start.S
    │   │       └── sys-jtag.c
    │   └── spi
    │       ├── Makefile
    │       ├── include
    │       │   ├── byteorder.h
    │       │   ├── endian.h
    │       │   ├── h3
    │       │   │   ├── reg-ccu.h
    │       │   │   └── reg-dram.h
    │       │   ├── io.h
    │       │   ├── stdarg.h
    │       │   ├── stddef.h
    │       │   ├── stdint.h
    │       │   ├── string.h
    │       │   ├── types.h
    │       │   └── xboot.h
    │       ├── link.ld
    │       └── source
    │           ├── start.S
    │           └── sys-spi.c
    ├── v3s_s3
    │   ├── jtag
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── endian.h
    │   │   │   ├── io.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   ├── v3s
    │   │   │   │   ├── reg-ccu.h
    │   │   │   │   └── reg-dram.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── start.S
    │   │       └── sys-jtag.c
    │   ├── s3-ddr
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── endian.h
    │   │   │   ├── io.h
    │   │   │   ├── s3
    │   │   │   │   ├── reg-ccu.h
    │   │   │   │   └── reg-dram.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── memcpy.S
    │   │       ├── memset.S
    │   │       ├── start.S
    │   │       ├── sys-clock.c
    │   │       ├── sys-dram.c
    │   │       └── sys-uart.c
    │   ├── spi
    │   │   ├── Makefile
    │   │   ├── include
    │   │   │   ├── byteorder.h
    │   │   │   ├── endian.h
    │   │   │   ├── io.h
    │   │   │   ├── stdarg.h
    │   │   │   ├── stddef.h
    │   │   │   ├── stdint.h
    │   │   │   ├── string.h
    │   │   │   ├── types.h
    │   │   │   ├── v3s
    │   │   │   │   ├── reg-ccu.h
    │   │   │   │   └── reg-dram.h
    │   │   │   └── xboot.h
    │   │   ├── link.ld
    │   │   └── source
    │   │       ├── start.S
    │   │       └── sys-spi.c
    │   └── v3s-ddr
    │       ├── Makefile
    │       ├── include
    │       │   ├── byteorder.h
    │       │   ├── endian.h
    │       │   ├── io.h
    │       │   ├── stdarg.h
    │       │   ├── stddef.h
    │       │   ├── stdint.h
    │       │   ├── string.h
    │       │   ├── types.h
    │       │   ├── v3s
    │       │   │   ├── reg-ccu.h
    │       │   │   └── reg-dram.h
    │       │   └── xboot.h
    │       ├── link.ld
    │       └── source
    │           ├── memcpy.S
    │           ├── memset.S
    │           ├── start.S
    │           ├── sys-clock.c
    │           ├── sys-dram.c
    │           └── sys-uart.c
    └── v831
        ├── jtag
        │   ├── Makefile
        │   ├── include
        │   │   ├── byteorder.h
        │   │   ├── endian.h
        │   │   ├── io.h
        │   │   ├── stdarg.h
        │   │   ├── stddef.h
        │   │   ├── stdint.h
        │   │   ├── string.h
        │   │   ├── types.h
        │   │   ├── v831
        │   │   │   ├── reg-ccu.h
        │   │   │   └── reg-dram.h
        │   │   └── xboot.h
        │   ├── link.ld
        │   └── source
        │       ├── start.S
        │       └── sys-jtag.c
        └── spi
            ├── Makefile
            └── include
                ├── byteorder.h
                ├── endian.h
                ├── io.h
                ├── stdarg.h
                ├── stddef.h
                ├── stdint.h
                ├── string.h
                ├── types.h
                └── v831

70 directories, 290 files

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.