
Best posts made by mangogeek
-
继MCore-H616核心板之后,这次弄个 R818 核心板玩玩(含工规)
终于lay到尾声,能不能跑起来得看运气。
当时MCore-H616核心板有几个缺点:
1、显示仅HDMI,和几乎没啥用的cvbs
2、核心板没带EMMC,导致只能配合TF卡运行
3、内存是单颗粒DDR3L,导致带宽有限然后,就尝试lay了一下R818,这是芯片框图:
R818更侧重于本地显示和CSI,可直接驱动 DSI/LVDS/RGB 这种接口的屏幕,其他资源和H616相当,惊喜是默认工规,有这类场景的可以多关注关注。
核心板带EMMC,最大64G还是128G来着到时候再说。
内存是LPDDR4,32bit的数据线,最大4GB可拉满R818的胃口。
另外芯片本体更小,所以这次将R818+EMMC+LPDDR4+PMU(带锂电池管理)整体做到了3x3cm。并且预留屏蔽罩安装。商业版本可选择焊接A133。系统方面除了本身提供的Android10以外,还有Tina-Linux。所以到时做完会发布Tina,ArmBian,Android三套系统。
-
MQ-Quad粉色版,以及安卓固件更新
固件,直接去资料页面,百度云下载就行。
- 注意1:安卓固件需要用PhoenixCard刷卡
- 注意2:h616和h618芯片固件不通用,目前发售的都是616版本,按需刷机
https://mangopi.org.cn/mqquad
附个H618工程版图片
-
mq-dual , mq-r T113 tina gt911适配
硬件连接
首先,查原理图,GT911触摸挂在TWI2上(PE12,PE13),CTP中断PB3,CTP复位控制:PB2
DTS
然后修改对应dts的twi2部分(Tina-Linux/device/config/chips/t113/configs/mq_r/linux-5.4/board.dts),修改好如下:
配置内核驱动
make kernel_menuconfig
Device Drivers ---> Input device support ---> [*] Touchscreens ---> [M] gt9xxnew touchscreen driver
配置文件系统部分
检查启动模块加载控制:Tina-Linux/target/allwinner/t113-mq_r/busybox-init-base-files/etc/init.d/rc.modules
文件内容如下,这里我们重点将gt9xxnew_ts.ko前的注释去掉,同时根据实际mangopi板子选择需要加载的wifi驱动模块。#!/bin/sh echo "------run rc.modules file-----" #export boot_partition=$(fw_printenv -n boot_partition 2>/dev/null) # if [ x${boot_partition} == xboot ];then /sbin/insmod /lib/modules/5.4.61/usb-storage.ko /sbin/insmod /lib/modules/5.4.61/sunxi_gpadc.ko /sbin/insmod /lib/modules/5.4.61/gt9xxnew_ts.ko echo 0x07090160 0x083F10F7 > /sys/class/sunxi_dump/write # /sbin/insmod /lib/modules/5.4.61/8723ds.ko /sbin/insmod /lib/modules/5.4.61/8189fs.ko sleep 4 wpa_supplicant -Dnl80211 -iwlan0 -c /etc/wifi/wpa_supplicant.conf -B # fi
然后编译打包:make;pack
上电信息
[ 6.076660] sunxi_gpadc_init,2151, success [ 6.081641] sunxi_gpadc_setup: get channel scan data failed [ 6.088244] input: sunxi-gpadc0 as /devices/virtual/input/input1 [ 6.100435] get ctp_power is fail, -22 [ 6.104646] get ctp_power_ldo_vol is fail, -22 [ 6.109692] sunxi_ctp_startup: ctp_power_io is invalid. [ 6.115586] get ctp_gesture_wakeup fail, no gesture wakeup [ 6.121812] gt9xxnew_ts 2-0014: 2-0014 supply ctp not found, using dummy regulator [ 6.329053] input: gt9xxnew_ts as /devices/virtual/input/input2
此时得到gt911的设备节点是event2:
root@TinaLinux:/# ls /dev/input/event*
/dev/input/event0 /dev/input/event1 /dev/input/event2修改自带lvgl8中的input配置部分,实现lvgl触摸功能
因为我们的tina-linux默认勾选了lvgl8,所以直接修改文件461行即可:/home/mango/1/Tina-Linux/package/gui/littlevgl-8/lv_examples/src/lv_drv_conf.h
重新打包编译:m;p
启动进入shell后,运行lv demo
root@TinaLinux:/# lv_examples 0 wh=800x480, vwh=800x480, bpp=32, rotated=0
-
使用Ubuntu20.04 LTS编译D1-Tina踩坑记录
头铁没注意看官方默认版本是14.04,总体来说还挺顺利,编译过程中遇到小坑记录一下。
系统:Ubuntu20.04.2 LTS 64位
TINA源码:
https://d1.docs.allwinnertech.com/study/study_2getsdk/
repo branch 输出是 product-smartx-d1-tina-v1.0-release
环境依赖:
参考官方:https://d1.docs.allwinnertech.com/study/study_3ubuntu/
特别注意:不同的源可能会装到不同的gawk版本。如果大于5.0则要看坑3。
坑1:
gdbusauth.c: In function '_g_dbus_auth_run_server': gdbusauth.c:1298:11: error: '%s' directive argument is null [-Werror=format-overflow=] 1298 | debug_print ("SERVER: WaitingForBegin, read '%s'", line);
解决:
out/d1-nezha/compile_dir/target/host/glib-2.50.1/gio/gdbusauth.c 将1298行的挪到 if语句后边,改完如下:1294 line = _my_g_input_stream_read_line_safe (g_io_stream_get_input_stream (auth->priv->stream), 1295 &line_length, 1296 cancellable, 1297 error); 1298 //debug_print ("SERVER: WaitingForBegin, read '%s'", line); 1299 if (line == NULL) 1300 goto out; 1301 debug_print ("SERVER: WaitingForBegin, read '%s'", line);
坑2 :
gdbusmessage.c: In function 'g_dbus_message_to_blob': gdbusmessage.c:2698:30: error: '%s' directive argument is null [-Werror=format-overflow=] 2698 | tupled_signature_str = g_strdup_printf ("(%s)", signature_str);
解决方法:同坑1,把gio/gdbusmessage.c: 2698行的tupled_signature_str = g_strdup_printf ("(%s)", signature_str);移到if else 语句块后面
2697 gchar *tupled_signature_str; 2698 //tupled_signature_str = g_strdup_printf ("(%s)", signature_str); 2699 if (signature == NULL) 2700 { 2701 g_set_error (error, 2702 G_IO_ERROR, 2703 G_IO_ERROR_INVALID_ARGUMENT, --- 2717 goto out; 2718 } 2719 tupled_signature_str = g_strdup_printf ("(%s)", signature_str); 2720 g_free (tupled_signature_str);
坑3 : libgpg-error包在gawk 5.0以上版本提示类似于如下的错误
./mkerrcodes | gawk -f ./mkerrcodes2.awk >code-from-errno.h gawk: ./mkerrcodes2.awk:94: warning: regexp escape sequence `\#' is not a known regexp operator gawk -f ./mkstrtable.awk -v textidx=2 -v nogettext=1 \ ./err-sources.h.in >err-sources-sym.h gawk: ./mkstrtable.awk:113: warning: regexp escape sequence `\#' is not a known regexp operator
比较省事的办法是gawk降级。
sudo apt autoremove gawk
wget https://ftp.gnu.org/gnu/gawk/gawk-4.2.1.tar.gz
然后解压,./configure --prefix=/usr --libexecdir=/usr/lib , make , make check , sudo make install , 再检查gawk:mg@Ubuntu:~/tina-d1-open$ gawk --version GNU Awk 4.2.1, API: 2.0
然后清理一遍之前输出: rm -r out/d1-nezha/compile_dir/target/libgpg-error-1.27
再 make -j1 编译通过。 -
兄弟们,MangoPi-麻雀MQ已成功量产
基础版本不带WiFi,但wifi周围器件/ipex等都是齐的,自行焊接8723,8189等。
WiFi版本到手可上网,带一条wifi天线。资料下周上传。
-
MQ-Pro 量产版本V1.2归来
整个MQ-Pro经历了三次版本,终于量产。
- V1.0 打样,HDMI部分翻车
- V1.1 打样测试
- V1.2 改进影响生产效率的地方,定型,量产
-
使用D1-H驱动树莓派DSI屏幕
续这位仁兄的贴子:https://bbs.aw-ol.com/topic/263
屏幕链接:https://item.taobao.com/item.htm?id=623507778498
转接板工程:
坑1:这个屏幕竟然是1lane,并非2lane。
坑2:卖家没给具体时序参数,看来得从屏幕上iic配置抓。
还没详细调时序参数,但初步已有显示。
软件过几天有空了详细调试后整理上传。
-
Reply: R818,4+32配置,暂时跑起来狠舒适
底板未回,今天仍然是飞线测试:
1、电源管理基于了axp717芯片,自带完善的锂电池充放电,比axp707的方案多了一路boost 5V。
2、测试VMID引脚,当外部连接到USB时,可实现充电,此时VMID为USB电压(5V左右),当去掉USB时,axp的dcdc4此时工作在boost模式,VMID也输出5V。
3、安卓10启动大概20秒,运行时,电流稳定在0.16A,此时电池电压为3.9V。
4、关于发热,个人感觉安卓轻载时完全不需要加散热片,芯片只是温热。等具体运行app时再测试动态电流吧。 -
试试哪吒MQ运行lvgl 60帧率触控效果
遇到点小插曲,由于厂家那边给GT911固化错了配置(把800480分辨率搞成了1024600),所以找厂家要了一份正确配置,需要ctp驱动中开启自动更新配置。
另外,tina linux驱动文件夹gt9xxnew中,分析gtp_init_panel初始化函数。因为手头这个屏幕与文件的都不同,并且看到源文件注释掉了从屏幕读取id。所以可确定sensor_id恒为0,那么就很简单了,自己的配置直接写到gt9xx.h的GOURP1即可。
#if GTP_COMPATIBLE_MODE msleep(50); #endif // ret = gtp_i2c_read_dbl_check(ts->client, GTP_REG_SENSOR_ID, &sensor_id, 1); dprintk(DEBUG_INIT, "CTP name : %s\n", config_info.name); if (!strcmp(config_info.name, "gt9271_mb976a9")) { sensor_id = 0; dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id); } else if (!strcmp(config_info.name, "gt9110_wt097")) { sensor_id = 1; dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id); } else if (!strcmp(config_info.name, "gt9271_wt097")) { sensor_id = 2; dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id); } else if (!strcmp(config_info.name, "gt9110_g200")) { sensor_id = 3; dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id); } else if (!strcmp(config_info.name, "gt9271_noah")) { sensor_id = 4; dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id); } else if (!strcmp(config_info.name, "gt9271_p2")) { sensor_id = 5; dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id); } else if (!strcmp(config_info.name, "gt911_1060")) { sensor_id = 6; dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id); } else if (!strcmp(config_info.name, "gt911_784")) { sensor_id = 7; dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id); } else { sensor_id = 0; dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id); } ret = SUCCESS; if (SUCCESS == ret) { if (sensor_id >= 0x08) { printk("Invalid sensor_id(0x%02X), No Config Sent!\n", sensor_id); ts->pnl_init_error = 1; return -1; } } else { printk("Failed to get sensor_id, No config sent!\n"); ts->pnl_init_error = 1; return -1; } } ts->gtp_cfg_len = cfg_info_len[sensor_id]; GTP_INFO( "CTP_CONFIG_GROUP%d used, config length: %d\n", sensor_id + 1, ts->gtp_cfg_len);
#define CTP_CFG_GROUP1 {\ 0x42,0x20,0x03,0xE0,0x01,0x0A,0x3D,0x00,0x01,0x08,0x28,0x08,\ 0x5A,0x46,0x03,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,\ 0x1A,0x1E,0x14,0x89,0x2A,0x09,0x57,0x5C,0xB5,0x06,0x00,0x00,\ 0x00,0x02,0x01,0x1D,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,\ 0x00,0x00,0x00,0x46,0x82,0x94,0xC5,0x02,0x07,0x00,0x00,0x04,\ 0x96,0x4A,0x00,0x85,0x54,0x00,0x77,0x5F,0x00,0x6A,0x6C,0x00,\ 0x5F,0x7A,0x00,0x5F,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,0x02,0x04,0x06,0x08,0x0A,0x0C,0x10,0x12,\ 0x14,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,\ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,\ 0x04,0x06,0x08,0x0A,0x0F,0x10,0x12,0x16,0x18,0x1C,0x1D,0x1E,\ 0x1F,0x20,0x21,0x22,0x24,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ 0x00,0x00,0x00,0x00,0x4B,0x01}
效果:
TODO:以后再尝试把group配置放到dts中,会不会更优雅些?
-
继续更新M-Core,这次跑android10
直呼:烫烫烫
M-Core不定期更新到B站上
https://t.bilibili.com/647016684108906501 -
Reply: 兄弟们,MangoPi-麻雀MQ已成功量产
截止到现在已售两种版本数量一共差不多300pcs,今天只发走了120pcs。剩余周一可发完。
顺便骗点赞:
twitter点com/mangopi_sbc/status/1469197984303022080 -
完工!MQ-V,基于V853的AI模组,有猫耳朵
V853(A7 1GHz 和内置 RV-MCU)
NPU 1Tops(与RK3568几乎相同的IP)
512MB DDR3L 和 8GB EMMC
axp2101 pmu
所有引脚都连接到金手指连接器,只有 27.5x42.5mm 。有俩猫耳朵,典故如下:
所以,看到小猫咪就能想到这个板子啦。
-
首批MQ已出完,月底上架新版,代号:大嗓门麻雀
首批(V1.5)做的不多,只有400片,大部分是WiFi版本,我自己留几片用于测试
下批次1K几乎全是WiFi版本。
下批V1.6更新项:
- 修改MIC为贴片型,减少生产焊接流程,全贴件
- 新增D类功放并引出到独立的Pin上,1瓦功率可直推小扬声器
- 调试串口(UART3)由当前的1.27间距修改为2.54.(当前的确实反人类,嘿嘿)
TODO项:
- 双网口盖板
- OV2640/5640 测试
-
正在打样MQ-Pro V1.1版本
V1.0样板:
CPU:D1,1G主频,动态供电
内存: 512MByte /1GByte DDR3
存储:TF Card
无线:WiFi+BT4 基于RTL8723ds
USB: typeC OTGx1,HOSTx1
显示:HDMI/DSI/LVDS
触控:CTP
摄像头:DVPx1
网络:DVP可复用为RMII
音频out:HPOUT
指示:电源和状态LED
底层console:uart0 位于40Pin内
尺寸:3x6.5cm ,4个固定装配脚
扩展口1:20P-FPC座,含LVDS/DSI和CTP
扩展口2(V1.0):40P-2.54,含2路I2C,3路UART,1路SPI/DBI,1路I2S(最多支持6路输入声道),一路DMIC(最多支持6声道),若干PWM和GPIO本次V1.1更新:
- 原生千兆网络:DVP端子的复用已增加RGMII千兆
- 扩展口2(V1.1):通过调整后,在原有基础上新增一路UART,新增LEDC控制
- 优化HDMI兼容性,增加TVS
- 优化WiFi天线阻抗匹配
-
作为一家艺术品公司,开发板只是副业。MQ-Pro V1.1 无bug版来了
V1.1更新:
网络:DVP端子的复用增加RGMII千兆
扩展口2(V1.1):通过调整后,在原有基础上新增一路UART,新增LEDC控制
优化HDMI部分走线,增加TVS
优化WiFi天线部分阻抗匹配V1.0初版详情:
CPU:D1,1G主频,动态供电)
内存: 512MByte DDR3/1GByte DDR3
存储:TF Card
无线:WiFi+BT4 基于RTL8723ds
USB: typeC OTGx1,HOSTx1
显示:HDMI/DSI/LVDS
触控:支持CTP
摄像头:DVPx1
网络:DVP可复用为RMII
音频out:HPOUT
指示:电源和状态LED
底层console:uart0 位于40Pin内
尺寸:3x6.5cm ,4个固定装配脚
扩展口1:20P-FPC座,含LVDS/DSI和CTP
扩展口2(V1.0):40P-2.54,含2路I2C,3路UART,1路SPI/DBI,1路I2S(最多支持6路输入声道),一路DMIC(最多支持6声道),若干PWM和GPIO -
麻雀,如何将单核RV改成双核ARM?
硬件设备:D1s/F133板子,自备热风枪或BGA返修台
首先,需要购买若干T113芯片:(假货宝上直接搜 全志T113 )
然后,将D1s/F133焊下来,把T113焊上去,务必记得T113的肚子要上焊锡,因为它是非常重要的GND
然后,改内存供电电压,MQ的原理图参考:https://mangopi.cc/_media/mq_sch_v1.6.pdf
DRAM从1.8V改到1.5V,需要改动R10成226K即可。
R10在板子哪里呢?我们看下ibom:https://mangopi.cc/_media/mq-1p6_bom.html
左侧找到R10,右侧自动高亮,找到它,换掉。
齐活。连接电脑,叮咚一声,接下来用xfel就能识别到啦 https://github.com/xboot/xfel
-
Reply: 哪吒MQ上线海外最大的极客众筹平台众筹
焊接F133的MQ众筹完就会停产。而T113版本的MQ-Dual暂时不受影响。
请关注新的MQ-R板子:https://bbs.aw-ol.com/topic/1125 (届时D1s和T113都有)
-
小麻雀直接驱动树莓派的DSI屏
续前贴:https://bbs.aw-ol.com/topic/311/
当时使用D1开发板驱动了,因D1的mipi是30pin,需要转接才能接树莓DSI屏。
麻雀设计的时候考虑到这点,直接板载的15Pin,所以直接接上就好。效果:
代码:(board.dts 和uboot-board.dts都替换下边的)
&lcd0 { lcd_used = <1>; lcd_driver_name = "tft08006"; lcd_backlight = <100>; lcd_if = <4>; lcd_x = <800>; lcd_y = <480>; lcd_width = <52>; lcd_height = <52>; lcd_dclk_freq = <33>; lcd_pwm_used = <1>; lcd_pwm_ch = <2>; lcd_pwm_freq = <1000>; lcd_pwm_pol = <0>; lcd_pwm_max_limit = <255>; /* lcd_hbp = <32>; lcd_ht = <868>; lcd_hspw = <4>; lcd_vbp = <12>; lcd_vt = <500>; lcd_vspw = <4>; */ lcd_hbp = <32>; lcd_ht = <868>; lcd_hspw = <4>; lcd_vbp = <10>; lcd_vt = <520>; lcd_vspw = <4>; lcd_dsi_if = <0>; lcd_dsi_lane = <1>; lcd_lvds_if = <0>; lcd_lvds_colordepth = <0>; lcd_lvds_mode = <0>; lcd_frm = <0>; lcd_hv_clk_phase = <0>; lcd_hv_sync_polarity= <0>; lcd_io_phase = <0x0000>; lcd_gamma_en = <0>; lcd_bright_curve_en = <0>; lcd_cmap_en = <0>; lcd_fsync_en = <0>; lcd_fsync_act_time = <1000>; lcd_fsync_dis_time = <1000>; lcd_fsync_pol = <0>; deu_mode = <0>; lcdgamma4iep = <22>; smart_color = <90>; /* lcd_gpio_0 = <&pio PG 13 GPIO_ACTIVE_HIGH>;*/ pinctrl-0 = <&dsi4lane_pins_a>; pinctrl-1 = <&dsi4lane_pins_b>; };
-
Reply: 请问如果D1S没有程序,上电后LDOA和LDOB,分别输出电压多少?
LDOA 始终固定1.8V
LDOB 原始应该是1.35V,加载dram调压驱动后变为1.5V(T113)或1.8V(F133)。 -
Reply: 100ASK百问网 D1s/T113-s3开发板 适配ov5640
@null037 在 100ASK百问网 D1s/T113-s3开发板 适配ov5640 中说:
,插入电脑中,即可查看到刚刚在T113开发板上使用ov5640拍摄的5张照片
强烈建议光速适配下MQ-R