页次: 1
我个人是觉得非常不错的,这么多配件,价格也还过的去,小刀一下应该不会介意,用料比较扎实的,该有的都有了,可玩性也非常不错。
店家之前还发给我一个学生买家自己拍的介绍视频,附上链接
https://www.bilibili.com/video/av70208645
https://www.bilibili.com/video/av61869988
逛闲鱼的时候,看到一台收银机,觉得挺有意思的,就买了台回来拆解,惊喜连连
具体配置如下:
1.主控:树莓派A+
2.5寸电容触摸屏,触摸芯片ili2113或gt9147两种芯片可以选
3.HDMI驱动板
4.stm32F407底板
5.500万摄像头
6.5V 5A电源
7.rtl8188 wifi模块
该机器采用树莓派A+作为主控,stm32F407的底板负责usb hub,供电以及扩展版的功能,摄像头负责识别二维码实现支付,
支持wifi或者usb转网口实现上网,还有一些其他功能,没有怎么仔细研究
开机界面
上图:
外观:
配件:
5v 5A电源:
wifi模块:
树莓派:
HDMI驱动板:
将HDMI驱动板直接连上天猫精灵
摄像头:
底板:
5寸电容液晶屏:
触摸芯片
正面
反面
该电容屏兼容LicheePi接口,直接插入就能使用,一次点亮,并运行xboot
树莓派A+,虽然比较老,但是可玩性还是很高的,上几个移植lvgl和awtk的视频
给树莓派装了retropie,做成游戏机
by the way
在店家那里还淘了另外一台用rk3128作为主控的,也是带触摸的,外观都差不多,暂时没时间研究,如果能玩起来,那真的是捡到大便宜了
上图
未完待续。。。。
有个问题想问一下,就是xboot中json配置文件中,一些字段的意思
比如在配置中断的时候
"irq-v3s-gpio@0x01c20a40": {
"interrupt-base": 192,
"interrupt-count": 6,
"interrupt-parent": 49
},
这其中的interrupt-base表示引脚的表号,可以再xxx_gpio.h中找到,但是后面的interrupt-count和interrupt-parent这两个参数又是什么意思
"gpio-v3s@0x01c208d8": {
"gpio-base": 192,
"gpio-count": 6,
"interrupt-offset": 192
},
同样的gpio-count和interrupt-offset这几个参数又是如何规定的
希望有大神能帮忙解答下
问题找到,我移植的是最新的6.0的lvgl,然后和旧版本的刷新函数比较了下,差距如下
uint16_t * fbp16 = (uint16_t *)fbp;
int32_t y;
for(y = act_y1; y <= act_y2; y++) {
location = (act_x1 + vinfo.xoffset) + (y + vinfo.yoffset) * finfo.line_length / 2;
memcpy(&fbp16[location], (uint32_t *)color_p, (act_x2 - act_x1 + 1) * 2);
color_p += w;
}
/*
旧版本
uint16_t * fbp16 = (uint16_t *)fbp;
int32_t y;
int32_t x;
for(y = act_y1; y <= act_y2; y++) {
for(x = act_x1; x <= act_x2; x++) {
location = (x + vinfo.xoffset) + (y + vinfo.yoffset) * finfo.line_length / 2;
fbp16[location] = color_p->full;
color_p++;
}
color_p += area->x2 - act_x2;
}
*/
将这里的刷新函数换成旧版本的,就解决了,但是还不是很理解代码的差异
在论坛里潜水也很久了,跟着各位大神也学到很多东西,其实很早之前就有听说过LittleVGL这款优秀的GUI,但是碍于自身水品的限制,一直不敢尝试。最近翅膀有点长硬了,想试试水,所以就移植到了自己的开发板上,我手头有两块开发板,分别是新塘的N32926和韦东山的JZ2440,都做了相应了适配,大家可以先看一下效果
话不多说直接上代码,在\board\256BA_zowee目录下,直接make,就可以编译出可执行文件了
不足的地方希望大家能指点,如果有能帮到您的地方,欢迎下方留言,谢谢。
重新整理了一下FB的内核驱动,将一些重点部分都列下下面,希望对大家有点帮助
osd_cpu_mmap /*虚拟内存*/
osd_dma_mmap /*物理内存*/
//w55fa92_VIN_PAC_BUFFER为摄像头采集地址
outl(w55fa92_VIN_PAC_BUFFER, REG_LCM_FSADDR)
/*set frambuffer start phy addr*/
outl(video_dma_mmap, REG_LCM_FSADDR);
w55fa92_write()
if (g_osd_fristWrite)
osd_buf_addr = osd_cpu_mmap;
osd_buf_addr += osd_block.y0 * LCDWIDTH * PIXEL_BSIZE;
osd_buf_addr += osd_block.x0 * PIXEL_BSIZE;
g_osd_buf_addr = osd_buf_addr;
else
osd_buf_addr = g_osd_buf_addr;
g_osd_fristWrite = 0;
g_osd_buf_addr = osd_buf_addr;
w55fa92fb_probe()
ret = w55fa92fb_map_video_memory(info);
/* video_buf_mmap is the LCD physical starting address, cpu is the virtual */
video_cpu_mmap=(unsigned long)fbi->map_cpu;
video_dma_mmap=(unsigned long)fbi->map_dma;
/*video_buf_mmap=(unsigned long)fbi->map_size;*/
osd_cpu_mmap=(unsigned long)video_cpu_mmap + fbi->map_size;
osd_dma_mmap=(unsigned long)video_dma_mmap + fbi->map_size;
osd_size = fbi->map_size;
w55fa92fb_set_lcdaddr(info);
/*set frambuffer start phy addr*/
outl(video_dma_mmap, REG_LCM_FSADDR);
outl(osd_dma_mmap, REG_LCM_OSD_ADDR);
w55fa92fb_ioctl
case OSD_SEND_CMD:
w55fa92fb_ioctl_additional
case OSD_SEND_CMD:
w55fa92_osd_function(&osd_buffer);
case OSD_FillBlock:
osd_block = *osd_ptr;
g_osd_fristWrite = 1;
按照您说的,重新查看了一下历程代码,在StartPreview()中ioctl(s_sVidData.i32VidFD, VIDIOCSPREVIEW, 1)这句中找到VIDIOCSPREVIEW这个命令,然后从内核中查找,在videoin.c文件中发现一个可以变量w55fa92_VIN_PAC_BUFFER,该变量在w55fa92_fb.c(LCD驱动文件)中被引用(extern unsigned int w55fa92_VIN_PAC_BUFFER),往下跟踪,最后找到outl(w55fa92_VIN_PAC_BUFFER, REG_LCM_FSADDR),而REG_LCM_FSADDR正是LCD驱动显存的基地址,由此可以看到,内核将摄像头图像采集地址确实就是LCD的显存地址。
tom 说:视频采集驱动源码路径linux-2.6.35.4\drivers\media\video\w55fa92_dev1
涉及到几个关键文件:
videoin.c 驱动入口文件
sensor_nt99141.c sensor控制
DevVin1.c 采集端口1的控制
vin_ioctl.c V4L驱动的ioctl
Sensor_ctl.c 辅助功能,控制sensor电源nuvoton提供了一个vin_demo程序,里面有StartPreview() StopPreview() 函数,顺着这些函数调用的ioctl,找到驱动里面的对应函数,可以分析出每步的具体操作。
按照您说的,重新查看了一下历程代码,在StartPreview()中ioctl(s_sVidData.i32VidFD, VIDIOCSPREVIEW, 1)这句中找到VIDIOCSPREVIEW这个命令,然后从内核中查找,在videoin.c文件中发现一个可以变量w55fa92_VIN_PAC_BUFFER,该变量在w55fa92_fb.c(LCD驱动文件)中被引用(extern unsigned int w55fa92_VIN_PAC_BUFFER),往下跟踪,最后找到outl(w55fa92_VIN_PAC_BUFFER, REG_LCM_FSADDR),而REG_LCM_FSADDR正是LCD驱动显存的基地址,由此可以看到,内核将摄像头图像采集地址确实就是LCD的显存地址。
视频采集驱动源码路径linux-2.6.35.4\drivers\media\video\w55fa92_dev1
涉及到几个关键文件:
videoin.c 驱动入口文件
sensor_nt99141.c sensor控制
DevVin1.c 采集端口1的控制
vin_ioctl.c V4L驱动的ioctl
Sensor_ctl.c 辅助功能,控制sensor电源nuvoton提供了一个vin_demo程序,里面有StartPreview() StopPreview() 函数,顺着这些函数调用的ioctl,找到驱动里面的对应函数,可以分析出每步的具体操作。
页次: 1