首页 > 其他分享 >全志V3S嵌入式驱动开发(基于usb otg的spi-nor镜像烧入)

全志V3S嵌入式驱动开发(基于usb otg的spi-nor镜像烧入)

时间:2023-10-24 18:44:56浏览次数:28  
标签:V3S uboot usb fel 全志 spi norflash sunxi

全志V3S嵌入式驱动开发(基于usb otg的spi-nor镜像烧入)

2023/10/24 18:27:22

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

 

        说到了用usb otg来实现spi nand flash的烧入,这中间主要用到了PhoenixSuit软件。那么怎么用usb otg来实现spi nor flash的烧入呢?这里就不得不提到sunxi-tools这个工具。这个工具目前有windows本版本和linux版本。中间还会涉及到libusb这个库,为了使用的方便,我们决定用linux版本的sunxi-tools来实现spi nor flash的烧入。

 

1、将 usb otg口导入到virtualbox当中

         上一篇文章的时候,我们说过v3s怎么进入usb otg了。主要就是这么几个步骤,拔掉sd卡、同时按下s6和s5、先松开s5、几秒后再松开s6即可。前面说过,在windows环境下用PhoenixSuit安装对应的驱动就可以了。如果是linux,那么就需要先让虚拟机里面的ubuntu看到这个usb设备,本质上,这和u盘、usb camera是一样的。

        有了上面这个操作之后,每次usb设备插入的时候,只要虚拟机开着,都会被虚拟机优先接管过来。

 

2、安装sunxi-tools工具

        将usb设备导入到虚拟机ubuntu之后,下一步就是安装sunxi-tools工具。下载的地址如下所示,注意一定是v3s-spi这个分支,

https://github.com/Icenowy/sunxi-tools/tree/v3s-spi

        网上关于sunxi-tools的下载地址很多,使用的同学最好多多测试,选用比较适合自己的版本。下载好代码之后,接着就是解压和编译。编译的过程中,最好先安装下libusb库,

sudo apt-get install libusb-1.0-0-dev

        编译本身就很简单了,进入目录直接make就好了。如果过程当中没有什么问题的话,那么就可以生成我们需要的sunxi-fel这个工具了。

make

 

3、替换nandflash为norflash

        之前的开发板使用的是nandflash,型号是mx35lf1ge4ab。这次为了测试,我们需要换一个norflash,不失一般性,选用了mx25l25645这款芯片。两款芯片都属于mxic公司的。一般来说nandflash大一点,会有512m、1g、2g这样的几个规格。而norflash则小得多,一般也就是128m、256m比较常见。

        这里,我们选用mx25l25645,其大小是256m bit,换成byte是32m。主要也是考虑了将来的用户使用情况。此外,之前的nandflash是qfn封装,可以选用热风枪来吹下来,而换上去的mx25l25645则引脚较长,直接用烙铁替换即可,注意一下方向就行。

 

4、使用sunxi-tools

        换好了norflash之后,就可以开始准备测试了。这个时候flash本身还是一个白片,里面没有任何的系统。此外,我们还拔掉了sd卡,所以直接上电之后,v3s就会自己进入usb状态,在ubuntu中开始输入sunxi-fel命令确认,usb设备已经被找到,

shell> sudo ../sunxi-tools-3s-spi/sunxi-fel version
AWUSBFEX soc=00001681(V3s) 00000001 ver=0001 44 08 scratchpad=00007e00 00000000 00000000

        如果看到这样的打印,就可以确认usb已经接入了。如果还是不确认,我们可以换一个命令试一下,

shell> sudo ../sunxi-tools-3s-spi/sunxi-fel -l
USB device 001:054   Allwinner V3s     12c00001:54304620:79304914:2c2c0f50

        看到设备接进来之后,下面一步需要做的就是确认spiflash设备同样被识别到了,继续输入命令,

shell> sudo ../sunxi-tools-3s-spi/sunxi-fel spiflash-info
Manufacturer: Macronix (C2h), model: 20h, size: 33554432 bytes.

        从C2h和Macronix的打印来说,说明我们焊接上去的norflash已经被识别到了。下面需要做的就是通过sunxi-fel让uboot跑起来。因为之前的uboot是基于sd卡编译和运行起来的,那么可以通过sunxi-fel先将之前的uboot下载到v3s内部的ram空间里面,再从ram运行起来。当然这一次uboot的运行在系统复位之后就丢失了,这个需要注意下,

shell> sudo ../sunxi-tools-3s-spi/sunxi-fel uboot u-boot-sunxi-with-spl.bin

        如果这个时候,开发板上还有一个串口的话,就可以看到这样的信息打印,

U-Boot SPL 2017.01-rc2 (Jun 20 2023 - 21:50:26)
DRAM: 64 MiB
Trying to boot from FELU-Boot 2017.01-rc2 (Jun 20 2023 - 21:50:26 +0800) Allwinner TechnologyCPU:   Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM:  64 MiB
MMC:   SUNXI SD/MMC: 0
Card did not respond to voltage select!
*** Warning - MMC init failed, using default environmentSetting up a 480x272 lcd console (overscan 0x0)
dotclock: 10000kHz = 10000kHz: (1 * 3MHz * 20) / 6
In:    serial@01c28000
Out:   serial@01c28000
Err:   serial@01c28000U-Boot 2017.01-rc2 (Jun 20 2023 - 21:50:26 +0800) Allwinner TechnologyCPU:   Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM:  64 MiB
MMC:   SUNXI SD/MMC: 0
Card did not respond to voltage select!
*** Warning - MMC init failed, using default environmentSetting up a 480x272 lcd console (overscan 0x0)
dotclock: 10000kHz = 10000kHz: (1 * 3MHz * 20) / 6
In:    serial@01c28000
Out:   serial@01c28000
Err:   serial@01c28000
Net:   No ethernet found.
starting USB...
No controllers found
Hit any key to stop autoboot:  0 
Card did not respond to voltage select!
Card did not respond to voltage select!
** Bad device mmc 0 **
Card did not respond to voltage select!
Card did not respond to voltage select!
** Bad device mmc 0 **
=> 
=> 

        上面这个内容中有一句打印,即Trying to boot from FEL。这说明uboot本身确实是从fel启动的,既不是从nandflash、也不是从norflash,当然更不可能是从sd卡启动了。

 

5、编译spi norflash的uboot

        前面我们虽然也运行起来了uboot,但是那个是通过sunxi-fel命令完成的。本身uboot并没有保存到norflash里面。因此,我们需要找到一个支持spi norflash启动的uboot,并且把通过sunxi-fel把它烧入到norflash里面,这样开机后v3s就可以自己从spi norflash启动起来了。

        首先下载uboot-spi代码,注意是v3s-spi-experimental这个分支,

https://github.com/Lichee-Pi/u-boot/tree/v3s-spi-experimental

        下载解压好后,首先是基础配置,


make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_defconfig

        完成配置之后,我们还需要进入menuconfig添加两个配置。第一个就是让uboot支持大容量的norflash,即超过16M的flash;第二个,就是让uboot支持mxic的norflash,因为默认uboot只支持winbond品牌。


make ARCH=arm menuconfig

        选择Device Drivers->SPI Flash Support,

         配置好之后,开始输入命令编译即可,

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

        稍微等待一会,就可以看到文件u-boot-sunxi-with-spl.bin,这就是我们最终需要烧入到norflash的文件,和之前是一样的。

 

6、烧入、运行新的uboot

        新的uboot出来之后,下面就是准备烧入了。首先还是让v3s进入usb otg状态,用sunxi-fel version确认设备已经接上,

shell> sudo ../sunxi-tools-3s-spi/sunxi-fel ver
AWUSBFEX soc=00001681(V3s) 00000001 ver=0001 44 08 scratchpad=00007e00 00000000 00000000

        确认没有问题之后,就可以用spiflash-write子命令来进行烧入了,

shell> sudo ../sunxi-tools-3s-spi/sunxi-fel -p spiflash-write 0x0 u-boot-sunxi-with-spl.bin 
100% [================================================]   414 kB,   28.1 kB/s 

        烧入到100%之后,一般这个时候我们并不着急确认uboot是不是真的烧入进去,而是用spiflash-read把烧入进去的数据读一小部分回来,看看和烧进去的数据比较一下,是否一致。

sudo ../sunxi-tools-3s-spi/sunxi-fel -p spiflash-read 0x0 0x1000 4k.bin
100% [================================================]     4 kB,   14.9 kB/s 

        都回来之后,可以拷贝到windows系统,用notepad++的hex插件查看下,确认没有问题。

        接下来就可以拔掉usb otg线,按一下复位键,不出意外,这个时候已经可以看到打印,确认从spi norflash启动系统了,

U-Boot SPL 2017.01-rc2 (Jun 22 2023 - 16:02:17)
DRAM: 64 MiB
Trying to boot from sunxi SPIU-Boot 2017.01-rc2 (Jun 22 2023 - 16:02:17 +0800) Allwinner TechnologyCPU:   Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM:  64 MiB
MMC:   SUNXI SD/MMC: 0
SF: Detected mx25l25635f with page size 256 Bytes, erase size 64 KiB, total 32 MiB
*** Warning - bad CRC, using default environmentSetting up a 480x272 lcd console (overscan 0x0)
dotclock: 10000kHz = 10000kHz: (1 * 3MHz * 20) / 6
In:    serial@01c28000
Out:   serial@01c28000
Err:   serial@01c28000U-Boot 2017.01-rc2 (Jun 22 2023 - 16:02:17 +0800) Allwinner TechnologyCPU:   Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM:  64 MiB
MMC:   SUNXI SD/MMC: 0
SF: Detected mx25l25635f with page size 256 Bytes, erase size 64 KiB, total 32 MiB
*** Warning - bad CRC, using default environmentSetting up a 480x272 lcd console (overscan 0x0)
dotclock: 10000kHz = 10000kHz: (1 * 3MHz * 20) / 6
In:    serial@01c28000
Out:   serial@01c28000
Err:   serial@01c28000
Net:   No ethernet found.
starting USB...
No controllers found
Hit any key to stop autoboot:  0 

        注意下,这个打印和nand启动、fel启动和sd卡启动都不一样的,因为它中间多了一行Trying to boot from sunxi SPI,这个是之前没有看到过的。当然如果还不放心,就可以利用uboot的sf命令,把norflash的前面1M空间重新擦除,看看是不是还能正常启动,看看是不是v3s会再次进入到usb otg的状态。

=> sf probe 0;
SF: Detected mx25l25635f with page size 256 Bytes, erase size 64 KiB, total 32 MiB
=> sf erase 0x0 0x100000;
SF: 1048576 bytes @ 0x0 Erased: OK
=> reset
resetting ...

        不出意外的话,因为norflash里面的uboot已经被删除,所以这个时候事实上v3s会再次进入到usb otg状态的,大家可以自己实操一下。

 

  全志V3S嵌入式驱动开发(基于usb otg的spi-nor镜像烧入)

标签:V3S,uboot,usb,fel,全志,spi,norflash,sunxi
From: https://www.cnblogs.com/zxdplay/p/17785495.html

相关文章

  • 【全志R128开发经验分享】启用USB ADB以及无线ADB配置方法
    首先在FreeRTOS的环境下,选择r128_c906_pro:sourceenvsetup.shlunch_rtosr128s2_pro_c906USBADB的配置比较常规,注意以下几个驱动的勾选usbdevice驱动adbgadget驱动adbd应用运行menuconfig,选择对应的驱动以及软件包:mrtos_menuconfig配置好的图片如下图所示当选......
  • Zephyr重定向日志打印到USB串口
    nRF52840DK开发板的例程大多数是从硬件串口打印日志,然后硬件串口在开发板上通过Jlink转换为USB串口,最后打印到电脑上。这里给出通过52840自己的USB串口打印日志的方法。以zephyr/samples/hello_world例程为例:修改config#使能串口驱动CONFIG_SERIAL=y#使能串口的中断模式(......
  • uboot配置usbhost及代码初步分析--Apple的学习笔记
    一,前言之前uboot没配置过usb,但是现在uboot基于DM模型基本和linuxdriver类似了。那么为了学习linuxdriver,我可以先学习uboot来做技术储备也是一样的。而且usb在uboot上应该也有用武之地,所以有必要进行刻意练习。二,分析1,之前对发现driver用了wraper的方式来打包进行绑定,我理解唯一......
  • 全志R128软件配置——RTOS 软件包配置
    RTOS软件包配置本文将介绍RTOS软件包、地址,内核配置等。Kconfig简介有过linux内核开发经验的人,对menuconfig不会陌生。对于各类内核,只要是支持menuconfig配置界面,都是使用Kconfig。换言之:menuconfig:支持配置内核的图形化界面。Kconfig:生成menuconfig界面的脚本......
  • 小明哥学linux驱动之USB-OTG(基于gadget框架)【转】
    转自:https://blog.csdn.net/silence3039/article/details/100187666一、简介OTG是On-The-Go的缩写。其设计的初衷是为了两个“外设”在没有PC(Host)的情况下,也可以通过USB进行数据传输。可以理解为,拥有OTG功能的USB设备(OTG设备)既可以做host,也可以做peripheral。二、OTG基本结构2......
  • 关闭小米手机的USB安装提示弹窗(及开发者模式找不到MIUI优化的解决办法)
    结论: 1.设置-更多设置-开发者选项(划到最底部)-关闭“MIUI优化”2.如果没有这个选项,在开发者选项界面底部,找一个重置默认设置之类的按钮,多点几次就出来了。(或执行 adbshellsettingsandputsecuremiui_optimization0 Source:https://xiaomilive.com/how-to-dis......
  • 全志R128驱动OLED屏幕步骤教程
    驱动OLED屏本文案例代码下载地址OLED驱动案例代码https://www.aw-ol.com/downloads?cat=24OLED,即有机发光二极管(OrganicLightEmittingDiode)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广......
  • 计算机出现鼠标出现乱跳问题(USB485模块识别为鼠标设备)
    原因:计算机把USB485模块识别成“串口鼠标设备”,先给485上电。由于串口上一直有485数据,系统启动时候,误认为串口发送的数据是鼠标数据,从而把串口设备识别成了鼠标设备。解决方法:禁用注册表中sermouse的启动项。具体步骤:1、键盘(win+R),出现运行窗口,输入regedit,回车进入注册表编辑器......
  • 全志芯片bsp命名规则 sunxi
    全志芯片bsp命名规则DOT小文哥于2022-07-2514:34:57发布阅读量2.1k收藏9点赞数4分类专栏:全志-FAQ文章标签:linux版权全志-FAQ专栏收录该内容142篇文章24订阅订阅专栏在linuxbsp中,allwinner平台统一命名为“sunxi”。即:linuxbsp中的“sunxi”可以理解为是allwinne......
  • 1790_给通过USB连接到树莓派的NTFS硬盘设置固定的挂载名称
            全部学习汇总:GreyZhang/little_bits_of_raspberry_pi:myhackingtripaboutraspberrypi.(github.com)        我用过好几个树莓派形式的单板电脑,但是遇到过磁盘挂载位置不确定的时候。有些甚至不会自动挂载。这些行为跟对应的OS的行为是相关的,而我......