页次: 1
阶段性成果:目前能够在正常运行状态切换到FEL了,可以读写内存什么的。但是还无法通过sunxi-fel操作SPI Flash。
// xboot代码里把IRQ MASK全置1了,至少需要把USB-OTG(bit 26)置0才能进FEL。 write32(0x01C20400 + 0x30, 0); // Control Register bit 13,使用高地址向量表 arm32_write_p15_c1(arm32_read_p15_c1() | (1 << 13)); // 跳转到FEL asm("BX %0" : : "r"(0xFFFF0020));
就是说USB可以识别FEL设备,但是不能操作flash?
是不是spi外设时钟等没有配置好?
晕哥 说:@wotou 多谢指教
一楼的司徒掌机用 JZ4760,
三楼 miyoo掌机用的 f1c100s ?https://whycan.cn/files/members/3/QQ20190109204532.png
坐等收货, 体验一把掌机的感觉
准备跟风买一个
达克罗德 说:楼主自己改变主意造成了损失,能怪谁?你自己不懂中文发生误会或者损失这很正常。请去把中文学好点,毕竟在中国,人们没有义务为你不懂中文造成的损失负责,不要一口一个中国骗子,这论坛都是中国人,晕哥还给你多次帮助
抱歉我的中文,只在清华大学上了一门中文课程。
这实际上是卖方的错 - 我曾三次要求他取消交货,他没有这样做。
关于中国文化,如果中国人想要出售给欧洲,强烈建议他们开始遵守一般贸易原则,包括欧洲的消费者法律,并提供适当语言的文件和手册等。
关于中国文学 - 当赤壁之战发生时 - 公元208-209?在我们的地区,特洛伊战争是在公元前1194年至1184年。保加利亚与马其顿,希腊,土耳其等人有着共同的历史。如果你认为中国人有一些有趣的故事,可以与奥德修斯,阿基里斯,赫拉克勒斯,亚历山大大帝等英雄竞争,那将会很有趣。
古希腊确实是一个神奇的地方,没有古希腊就没有文艺复兴,也就没有现代文明。
中国近代没有跟上世界的脚步,加上上世纪政局动荡,被世界远远甩在后面,改革开放四十年搭上了全球经济发展的快车道,家里勉强有点余粮, 欧洲有很多值得我们中国人学习的地方,我们应该认识到自己不足。
basicdev 说:这个Demo真是666,这个是gif的吗,是不是用zlg gui模拟器导出的gif,方便分享代码吗?
想多了,这个是荔枝派屏幕显示,手机拍下来,然后软件转成GIF的,图像质量一下降,颜色都没了,不好看了。
但这个的demo我已经写了教程,在博客园,有源码。 https://www.cnblogs.com/zhinianzhizhan/p/10051013.html 。
就是在荔枝派Nano上面移植显示的,要的话拿去。不过没有你说的GUI自己导出GIF的功能........它没有那么高级,图片显示函数都要自己写,简单的菜单等功能倒是能实现,虽然丑了点。而且我不清楚这个GUI是否免费,纯粹拿来玩。如果你想要你说的功能,得自己写或另外移植支持此功能的GUI了。另外,驱动代码就是本帖子的大神的作品,希望楼主允许。
感谢解惑, 拜读了你的帖子,简直就是小白从入门到精通啊,还提供源码下载。
didi 说:605364021 说:我知道有自带的sun4i-lradc-keys驱动,但是我刚刚开始学写驱动,希望自己写个简单的lradc驱动来实现相关功能,但我没搞懂怎么如何去检测是哪个按键按下...网上大部分都是1个gpio对应1个按键,但是V3S用的是ADC按键
https://github.com/Lichee-Pi/linux/blob/zero-4.13.y/drivers/input/keyboard/sun4i-lradc-keys.c
注册成为输入设备,按后利用adc中断输出自定义的key值给用户层。
你也可以写一个最简单的驱动程序,利用这个adc,从轮询开始,先别用中断。
sun4i-lradc-keys是用平台驱动设备模型为架构来编写的,但是这个驱动我想用杂项设备来做可以?做成一个.ko内核模块来完成检测功能,
完全可以,一点问题都没有。
实际操作函数如下
function do_pack_linux()
{
printf "packing for linux\n"ln -s ${LICHEE_OUT}/vmlinux.tar.bz2 vmlinux.fex
ln -s ${LICHEE_OUT}/boot.img boot.fex
ln -s ${LICHEE_OUT}/rootfs.ext4 rootfs.fex# Those files is ready for SPINor.
ln -s ${LICHEE_OUT}/uImage kernel.fex
ln -s ${LICHEE_OUT}/rootfs.squashfs rootfs_squashfs.fexif [ "x${PACK_SIG}" = "xsecure" ] ; then
do_signature
else
echo "normal"
fi
}
这个是pack 命令后面跟的参数不同吧?
楼主看下这个sdcard 录音demo,更简单一点,可以跟进源码看下
晕哥 说:提示什么错误?是不是fat32文件系统没有编译进来?
没有提示什么如下图,我另一个u盘可以挂载,这个u盘提示usb 2.0 就是挂载不了,是不是v3s不支持usb2.0的设备呀
https://whycan.cn/files/members/404/4P0DLITJLEVXBQYJR-ZCAA.png
晕哥意思是 mount 命令提示什么?
注意在参数设置中要勾选字节倒叙选项。
下面写一个测试程序,加载驱动并把图像显示到屏幕上
C测试程序
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <stdlib.h>
#include <string.h>
/*seconds: the seconds; mseconds: the micro seconds*/
void setTimer(int seconds, int mseconds)
{
struct timeval temp;
temp.tv_sec = seconds;
temp.tv_usec = mseconds;
printf("timer1\n");
select(0, NULL, NULL, NULL, &temp);
printf("timer2\n");
return ;
}
int main ()
{
char lichee[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xE0,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x60,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xC0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x00,0x07,0x3C,0x74,0xE0,0x81,0x03,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x00,0x04,0x22,0x8C,0x10,0x43,0x04,0xF0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x00,0x04,0x42,0x84,0x10,0x22,0x0C,0xF8,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x00,0x04,0x03,0x84,0x08,0x22,0x08,0xFC,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x00,0x04,0x01,0x84,0x18,0x22,0x08,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x00,0x04,0x01,0x84,0x18,0x20,0x00,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x00,0x04,0x01,0x84,0x08,0x20,0x00,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x10,0x04,0x03,0x84,0x18,0x20,0x00,0xFE,0xFF,0x00,0x00,0x00,0x00,0x00,0x08,
0x40,0x10,0x04,0x02,0x84,0x10,0x22,0x00,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x0C,
0x40,0x18,0x04,0x06,0x84,0x30,0x40,0x04,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x06,
0xE0,0x0F,0x1F,0x1C,0xCE,0xC1,0x80,0x03,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x07,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x80,0x07,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xBF,0xFF,0x1F,0x00,0x00,0x00,0xC0,0x07,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xDF,0xFF,0x7F,0x00,0x00,0x00,0xE0,0x07,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC7,0xFF,0xFF,0x00,0x00,0x00,0xF0,0x03,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC9,0xFF,0xFF,0x01,0x00,0x00,0xF0,0x03,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xC0,0xFF,0xFF,0x03,0x00,0x00,0xF8,0x03,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xFF,0xFF,0x07,0x00,0x00,0xF0,0x03,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xC0,0xF7,0xFF,0x0F,0x00,0x00,0xF8,0x03,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE3,0xFF,0xFF,0x1F,0x00,0x00,0xF8,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xEF,0xFF,0xFF,0x7F,0x00,0x00,0xF8,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFB,0xFF,0xFF,0xFF,0x00,0x00,0xFC,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xFC,0x00,
0x40,0x30,0x00,0x06,0x04,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xFE,0x00,
0x40,0x10,0x02,0x06,0x04,0xC0,0x00,0x9C,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xFF,0x00,
0xFE,0xFF,0x07,0x06,0x04,0x80,0xC8,0x81,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x7F,0x00,
0x40,0x10,0x00,0x06,0x04,0x80,0x08,0x00,0xFF,0xFF,0xFF,0xFF,0x7F,0x80,0x7F,0x00,
0x40,0x13,0x00,0x16,0xCC,0x00,0x08,0x10,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x7F,0x00,
0x00,0xC3,0xC0,0x3F,0x04,0x00,0x08,0x0E,0xFE,0xFF,0xFF,0xFF,0xFF,0xE3,0x3F,0x00,
0x00,0xC1,0x00,0x06,0x04,0x10,0x48,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xF7,0x3F,0x00,
0x80,0x41,0x00,0x06,0x04,0x20,0x49,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,
0x80,0x40,0x00,0x0E,0x44,0x20,0x48,0x30,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,
0x60,0x78,0x00,0x9F,0x61,0x80,0x48,0x08,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,
0x38,0x30,0x00,0x17,0x60,0x80,0x48,0x02,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,
0x20,0x60,0x00,0x17,0x21,0x80,0x48,0x02,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,
0xFE,0xFB,0x83,0x06,0x30,0x40,0x48,0x02,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,
0x30,0x23,0x02,0x06,0x12,0x70,0x44,0x04,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,
0x30,0x23,0x42,0x06,0x1A,0x60,0x44,0x04,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,
0x10,0x31,0x02,0x06,0x0C,0x40,0x44,0x08,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,
0x18,0x11,0x03,0x06,0x0E,0x60,0x42,0x18,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,
0x88,0x19,0x03,0x06,0x31,0x60,0xC2,0x30,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,
0xC4,0xCD,0x01,0x86,0xE0,0x61,0x41,0x20,0xE0,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,
0x00,0x82,0x01,0x36,0x80,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x9F,0xFF,0xFF,0xFF,0x07,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0xFF,0xFF,0xFF,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0xFF,0x7F,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x0F,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x7F,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
int fp=0;
long screensize=0;
char *fbp = 0;
struct fb_var_screeninfo vinfo;
struct fb_fix_screeninfo finfo;
fp = open ("/dev/fb1",O_RDWR);
if (fp < 0){
printf("Error : Can not open framebuffer device/n");
exit(1);
}
if (ioctl(fp,FBIOGET_FSCREENINFO,&finfo)){
printf("Error reading fixed information/n");
exit(2);
}
if (ioctl(fp,FBIOGET_VSCREENINFO,&vinfo)){
printf("Error reading variable information/n");
exit(3);
}
printf("The mem is :%d\n",finfo.smem_len);
printf("The line_length is :%d\n",finfo.line_length);
printf("The xres is :%d\n",vinfo.xres);
printf("The yres is :%d\n",vinfo.yres);
printf("bits_per_pixel is :%d\n",vinfo.bits_per_pixel);
screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
printf("screensize: %d\n",screensize);
fbp =(char *) mmap (0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED,
fp,0);
if ((int) fbp == -1)
{
printf ("Error: failed to map framebuffer device to memory./n");
exit (4);
}
int i=0;
memset(fbp, 0x00, 1024);
setTimer(3,0);
while(1){
for(i=0;i<1024;i++){
fbp[ i ]=lichee[ i ];
}
setTimer(3,0);
memset(fbp, 0x00, 1024);
setTimer(3,0);
}
munmap (fbp, screensize);
close (fp);
}
修改: arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dts
&i2c0 {
status = "okay";ns2009: ns2009@48 {
compatible = "nsiway,ns2009";
reg = <0x48>;
};ssd1306fb: ssd1306fb@3c {
compatible = "solomon,ssd1306fb-i2c";
reg = <0x3c>;
solomon,width = <128>;
solomon,height = <64>;
reset-gpios = <&pio 1 0 GPIO_ACTIVE_HIGH>;
solomon,page-offset = <0>;
solomon,com-invdir;
};};
配合这个bootcmd
sf probe 0; sf read 0x41800000 0x100000 0x10000; sf read 0x41000000 0x110000 0x600000; bootz 0x41000000 - 0x41800000
烧写命令就是:
sudo sunxi-fel -p spiflash-write 0 uboot/u-boot-sunxi-with-spl.bin
sudo sunxi-fel -p spiflash-write 0x100000 linux/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dtb
sudo sunxi-fel -p spiflash-write 0x110000 linux/arch/arm/boot/zImage
至此全部搞定, Linux跑起来了.
basicdev 说:发现根本不引导Linux
Environment size: 4297/32764 bytes
=> sf probe 0; sf read 0x41800000 0x100000 0x10000; sf read 0x41000000 0x110000 0x600000; bootz 0x41000000 - 0x41800000
Unknown command 'sf' - try 'help'
Unknown command 'sf' - try 'help'
Unknown command 'sf' - try 'help'
=>貌似不支持sf命令,去看看是不是编译sf编译开关没开启。
还真是这个问题,感谢大神.把sf选上就可以了。
Command line interface --->
Device access commands --->
[ * ] sf
[ * ] sspi
非常感谢楼上的朋友, 你提醒了我.
刚刚git 升级到最新版本:
git pull origin v3s-spi-experimental
然后再选择启用SPI总线
SPI Support --->
[ * ] Enable Driver Model for SPI drivers
[ * ] Allwinner SPI driver
搞定:
U-Boot 2017.01-rc2-00073-gdd6e874-dirty (Oct 06 2017 - 15:29:00 +0800) Allwinner Technology
CPU: Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM: 64 MiB
MMC: SUNXI SD/MMC: 0
SF: Detected w25q128bv with page size 256 Bytes, erase size 4 KiB, total 16 MiB
*** Warning - bad CRC, using default environmentSetting up a 800x480 lcd console (overscan 0x0)
dotclock: 33000kHz = 33000kHz: (1 * 3MHz * 66) / 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: 2 1 0
Unknown command 'sf' - try 'help'
Unknown command 'sf' - try 'help'
Unknown command 'sf' - try 'help'
=>
我是一步一步按照这个做的:
https://www.kancloud.cn/lichee/lpi0/331844
准备uboot
下载包含spi驱动的体验版本uboot,该驱动目前尚未合并到主线
git clone -b v3s-spi-experimental https://github.com/Lichee-Pi/u-boot.git
执行make ARCH=arm menuconfig打开uboot菜单配置,进入到Device Drivers > SPI Flash Support
注意看一下自己flash的厂家名称,例如选上Macronix SPI flash support用来支持我测试用的flash:MX25L12873F。
上面这些步骤都做好了.然后:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make LicheePi_Zero_800x480LCD_defconfig
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make menuconfig
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make -j3
烧录:
sudo sunxi-fel -p spiflash-write 0 u-boot-sunxi-with-spl.bin
上电后串口终端输出这个错误:
U-Boot SPL 2017.01-rc2-00056-ga297a99 (Oct 06 2017 - 11:37:04)
DRAM: 64 MiB
SPL: Unsupported Boot Device!
SPL: failed to boot from all boot devices
### ERROR ### Please RESET the board ###
下载 1.9 版本的 svn
解压
tar xvf subversion-1.9.7.tar.bz2
配置:
./configure
发现编译通不过,缺这缺那的, 赶紧装软件:
sudo apt-get install libapr1-dev
sudo apt-get install libaprutil1*-dev
再次 ./configure 搞定,
继续make,
然后sudo make install 安装成功
以前托管在 svnchina.com 的一个项目,后来因为没有续费, 所以导出一个本地版本.
没想到最近使用的时候碰到一点麻烦。
当时导出的时候用的是 svn1.9@Windows7 的版本,
今天去Ubuntu下使用出了麻烦,
svn checkout file:///disk2/w55fa92_svn_repo/
出现了如下麻烦:
svn: E160043: Expected FS format between '1' and '6'; found format '7'
放狗一搜,发现是svn 版本麻烦, 大意是当前svn软件只识别 1 - 6 格式, 不识别 7 格式。
然而,我想升级svn版本的时候,却发现根本没有入口.
能想到的办法只有自己下载源码编译一个 svn 1.9 了
页次: 1