Gaviar Handheld (小志掌機)
-
【碟】照来了,丑了点。但功能验证应该够用了。没有司徒 大佬的加藤鹰手法,右边的接口焊接失败了,。@steward

我要尽快跟上你的节奏了@lovehex99 -
@yofa2008 在 Gaviar Handheld (小志掌機) 中说:
【碟】照来了,丑了点。但功能验证应该够用了。没有司徒 大佬的加藤鹰手法,右边的接口焊接失败了,。
你这个看着像个黑莓手机,上面一个屏幕,下面好多按键
-
-
@yofa2008 你自己打版喔 厲害
-
@steward 在 Gaviar Handheld (小志掌機) 中说:
編譯步驟
換了16G
root@TinaLinux:/etc# mount /dev/mmcblk0p8 /mnt/UDISK/
mount /dev/mmcblk0p8 /mnt/UDISK/
mount: mounting /dev/mmcblk0p8 on /mnt/UDISK/ failed: Input/output error
只有沒對 /dev/sdb8 進行擴充但UART還是開不起來
我編譯步驟是照這個帖子的
Starting kernel ...[02.156][mmc]: MMC Device 2 not found
[02.160][mmc]: mmc 2 not find, so not exit -
-
@lovehex99 你没打板如何 搭硬件环境的?是有现成的板子买吗?
@xiaowenge 都是想尽可能匹配‘小志’的硬件外设,布局按键在CAD里转来转去花了些时间。哈哈 -
@yofa2008 厉害厉害。。怎么用CAD的?
-
@yofa2008 買的喔
-
@steward 在 Gaviar Handheld (小志掌機) 中说:
兩個問題問一下:
- 你是如何燒錄檔案到 MicroSD ?
- 因為預設是使用 adb shell 進入操作(USB Type-C), 你有使用 adb shell 試試嗎?
1.用PhoenixCardv4.2.7.7z
2.有的 ADB SHELL可以操作 -
解開後, 使用 dd 命令燒錄到 MicroSD 卡後, 插入開機, 就會開始播放 Nokia 手機鈴聲~
-
@lovehex99 在 Gaviar Handheld (小志掌機) 中说:
@steward 在 Gaviar Handheld (小志掌機) 中说:
兩個問題問一下:
- 你是如何燒錄檔案到 MicroSD ?
- 因為預設是使用 adb shell 進入操作(USB Type-C), 你有使用 adb shell 試試嗎?
1.用PhoenixCardv4.2.7.7z
2.有的 ADB SHELL可以操作@steward 请问提示Is not Boot mode!是什么意思?我只写了uart4的那个img,没有在adb下找到devices哦
by the way.重新烧写了一下img解决,work type选择start up.

-
播放wav文件,拷贝了一个windows自带的wav.

-
@lovehex99 @steward
今天测试了一张256MB的卡,能正常播放wav。UART4也可正常交互

-
@yofa2008
你是直接燒司徒給的那個img吧?
我是從github下載自己編譯的 -
@lovehex99 对的。建议您也先排除简单的问题,再上手改比较容易。
-
@yofa2008 我硬件是用買的 所以應該沒問題
最近也忙 等後續教程多點再來玩 -
最近在幫 Miyoo Mini/Miyoo Mini Plus 移植 drastic NDS 模擬器, 目前已經快完善了, 這邊先晚一點更新 ~
-
@steward 许久没见大佬跟贴,猜测一定是在忙大事。目前我遇到了诡异的问题:为何用dd的命令复制到TF卡的img不写入,而phoenix写的img就能写入。是dd命令的问题??
见图
-
@yofa2008 img不是磁盘镜像文件,是专有的压缩格式,不带分区表。可以用OpenixCard转换为dd可以写入的带分区表的镜像
-
@awwwwa 啊,原来这样。感谢告知,司徒大佬在帖里提了一下,没说细节。有空我试一下了
-
@xiaowenge 三明治结构的全键盘工程机来了,准备就绪。就等司徒大佬回来传授一下如何替换屏驱动开机了@steward,linux开发不会搞,跟大神学会
图:
-
@steward 在 Gaviar Handheld (小志掌機) 中说:
司徒接下來介紹點屏的步驟,而在點屏之前,我們需要先了解一下屏的一些特性,這樣才可以跑順後面的開發,一般常說的 8080 屏、i80 屏、MCU 屏,指的就是傳輸資料的方式是使用 Intel 8080 的讀寫方式,其實早期是有兩大派別,分別是 Intel 8080 和 Motorola 6800,至於為何後來都用 Intel 8080,這應該不用多說,8080 和 6800 的格式可以從下圖知曉

那為何 i80 屏需要做初始化呢 ?因為裡面有專門用來做顯示處理的 MCU,因此,需要設定一些參數,如:width=320, height=240, fps=60 等參數,所以傳送給屏的資料會分成 Data 和 Command,當然,有些特殊制定規格的屏就不須要初始化,因為參數都已經寫死並且固定在 MCU 裡,不過,市面上比較難購買到這類產品

MCU 在顯示圖像時,會固定從 RAM(或稱呼:顯示記憶體、Graphic RAM、GRAM)讀取資料並顯示在屏上面
那該如何初始化呢?目前市面上的屏大約可以分成兩種作法:1. 使用 DB0~DB15 傳送初始化 Data 和 Command, 2. 使用 I2C 傳送 Data 和 Command

兩種方式都可以達到初始化的目的,因此,在購買 i80 屏後,記得跟賣家索取初始化命令
那問題來了,當我們正在刷屏(寫入 RAM)時,MCU 是否有可能正在讀取 RAM ?答案:沒錯,這種狀況一定會發生,假如寫入跟讀取沒有一個同步機制,那就會發生這種狀況,而這種狀況就是一般俗稱:撕裂、閃屏、Screen Tearing,司徒畫了一張流程圖,下圖是 MCU 讀取 RAM 並且顯示在屏上的流程

當 F133 透過 TCON_LCD i80 介面傳送資料給屏時(黃色的像素),由於共用同一塊 RAM,因此,RAM 的內容被更新成黃色,同時,屏的 MCU 也正在更新圖像到屏上,因此,變成第一個畫面(紅色)和第二個畫面(黃色)的交疊狀況,如下圖

那 i80 屏的撕裂問題如何解決呢?其實,一般 i80 屏都會拉出 TE/FRAME 腳位,這個腳位一般不使用,因為它跟時序高度相關,需要同步處理,同常 TE/FRAME 腳位都會懸空,不過,TE/FRAME 腳位其實是用來告知屏的 MCU 是否正在更新圖像(讀取 RAM),因此,為了避免撕裂,F133 TCON_LCD 可以在 MCU 空閒時,傳送更新的資料,這樣就可以避免撕裂

那是不是搞定 TE/FRAME 腳位後,屏就不會撕裂?答案:不是,因為,從模擬器、顯示驅動到硬件傳送都可能會有撕裂問題,所以要確保顯示品質,任何經過的地方都必須仔細處理才可以保證畫面不撕裂

根據司徒的經驗,在不同地方的所造成的撕裂,將會有不一樣的結果,下圖是司徒整理的有趣現象,模擬器因為是像素更新居多,因此,覆蓋一般是從起始像素開始,所以撕裂比較像是上下分層,而顯示驅動一般使用區塊複製,因此,撕裂是屬於左右分層,屏的撕裂,由於更新跟寫入是屬於追跑的現象,因此,撕裂屬於三角分層

LCD 電路


main.s.global _start .equ GPIO_BASE, 0x02000000 .equ PD_CFG0, 0x0090 .equ PD_CFG1, 0x0094 .equ PD_CFG2, 0x0098 .equ PD_DAT, 0x00a0 .equ LCD_RST, (1 << 0) .equ LCD_WR, (1 << 18) .equ LCD_RS, (1 << 19) .equ LCD_RD, (1 << 20) .equ LCD_CS, (1 << 21) .equ LCD_BL, (1 << 22) .equ _250MS, 50000000 .equ _500MS, 100000000 .equ _1S, 200000000 .text .long 0x4000006f .byte 'e','G','O','N','.','B','T','0' .long 0x5F0A6C39 .long 0x8000 .long 0, 0 .long 0, 0, 0, 0, 0, 0, 0, 0 .long 0, 0, 0, 0, 0, 0, 0, 0 .org 0x0400 _start: li t0, 0x11111111 li a0, GPIO_BASE + PD_CFG0 sw t0, 0(a0) li a0, GPIO_BASE + PD_CFG1 sw t0, 0(a0) li a0, GPIO_BASE + PD_CFG2 sw t0, 0(a0) li t0, 0xffffffff li a0, GPIO_BASE + PD_DAT sw t0, 0(a0) jal lcd_rst li t0, 0xb2 jal lcd_cmd li t0, 0x5c jal lcd_dat li t0, 0x5c jal lcd_dat li t0, 0x00 jal lcd_dat li t0, 0x33 jal lcd_dat li t0, 0x33 jal lcd_dat li t0, 0xb7 jal lcd_cmd li t0, 0x35 jal lcd_dat li t0, 0x21 jal lcd_cmd li t0, 0x11 jal lcd_cmd li t0, _250MS jal delay li t0, 0xe0 jal lcd_cmd li t0, 0xd0 jal lcd_dat li t0, 0x06 jal lcd_dat li t0, 0x0b jal lcd_dat li t0, 0x07 jal lcd_dat li t0, 0x07 jal lcd_dat li t0, 0x24 jal lcd_dat li t0, 0x2e jal lcd_dat li t0, 0x32 jal lcd_dat li t0, 0x46 jal lcd_dat li t0, 0x37 jal lcd_dat li t0, 0x13 jal lcd_dat li t0, 0x13 jal lcd_dat li t0, 0x2d jal lcd_dat li t0, 0x33 jal lcd_dat li t0, 0xe1 jal lcd_cmd li t0, 0xd0 jal lcd_dat li t0, 0x02 jal lcd_dat li t0, 0x06 jal lcd_dat li t0, 0x09 jal lcd_dat li t0, 0x08 jal lcd_dat li t0, 0x05 jal lcd_dat li t0, 0x29 jal lcd_dat li t0, 0x44 jal lcd_dat li t0, 0x42 jal lcd_dat li t0, 0x38 jal lcd_dat li t0, 0x14 jal lcd_dat li t0, 0x14 jal lcd_dat li t0, 0x2a jal lcd_dat li t0, 0x30 jal lcd_dat li t0, 0x36 jal lcd_cmd li t0, 0xb0 jal lcd_dat li t0, 0x2a jal lcd_cmd li t0, 0x00 jal lcd_dat li t0, 0x00 jal lcd_dat li t0, 0x01 jal lcd_dat li t0, 0x3f jal lcd_dat li t0, 0x2b jal lcd_cmd li t0, 0x00 jal lcd_dat li t0, 0x00 jal lcd_dat li t0, 0x00 jal lcd_dat li t0, 0xef jal lcd_dat li t0, 0x3a jal lcd_cmd li t0, 0x55 jal lcd_dat li t0, 0x29 jal lcd_cmd li t0, 0x2c jal lcd_cmd li t6, 320 * 80 red: li t0, 0xf800 jal lcd_dat addi t6, t6, -1 bgtz t6, red li t6, 320 * 80 green: li t0, 0x7e0 jal lcd_dat addi t6, t6, -1 bgtz t6, green li t6, 320 * 80 blue: li t0, 0x1f jal lcd_dat addi t6, t6, -1 bgtz t6, blue 1: j 1b lcd_wr: li a0, GPIO_BASE + PD_DAT li t4, 0x00ff and t2, t0, t4 li t4, 0xff00 and t3, t0, t4 sll t2, t2, 1 sll t3, t3, 2 move t5, t1 or t5, t5, t2 or t5, t5, t3 sw t5, 0(a0) li t0, LCD_WR or t5, t5, t0 sw t5, 0(a0) jr ra lcd_dat: move a1, ra li t1, LCD_RS | LCD_RD | LCD_BL | LCD_RST jal lcd_wr jr a1 lcd_cmd: move a1, ra li t1, LCD_RD | LCD_BL | LCD_RST jal lcd_wr jr a1 lcd_rst: move a1, ra li t0, 0x00000000 li a0, GPIO_BASE + PD_DAT sw t0, 0(a0) li t0, _250MS jal delay li t0, 0xffffffff li a0, GPIO_BASE + PD_DAT sw t0, 0(a0) li t0, _250MS jal delay jr a1 delay: addi t0, t0, -1 bgtz t0, delay jr ra .end
完成

请教@steward 这个main.s文件 怎么加载到启动完成的系统中去执行啊,目前在配置lcd需要在上面 修改些参数
-
@lovehex99
请问哪里买的?谢 -
-
-
@yofa2008 你好,蓝色的有按钮的板是哪里买的?
-
@johnaa 临时自己打板做的,用它来完成gpio转接
-
@lovehex99 你github下载的工程能编译出可运行的img吗? 在没有任何改动的情况下,编译出的img串口启动时提示出错,我用的是ubuntu20.04。

有没有什么思路? -
@yofa2008
很久没玩了 我在等晕哥的安卓掌机 -
@lovehex99 别啊,这就弃坑了吗?我的F1C100都还在坑里呢
-
我用MangoPI官网的github包编译出能正常启动的img,网址(https://mangopi.org/mqr);
!
但用司徒大神的包编译的img始终不能正常引导,提示如之前反馈的错误,大致意思是两个ERROR:没有找到uboot.fex头和opensbi.fex头;
!
对比了一些目录发现差异还是比较多的,特别是lichee\brandy-2.0\spl下面:
司徒大神的包里面没有找到sboot文件夹,不知道是啥原因;

我按@steward 你的包编译的固件日志第二行直接调用了include\commit_info.h的CI_INFO那个hash,但你编译好的Img第二行是sh脚本调用log文件生成的。能提示可能是什么原因吗?
MangoPI使用的是lichee\brandy-2.0\目录下的spl-pub,里面内容和你的spl文件目录相差还是比较大。目前已经重新在github上多次下载并编译,问题仍然一致。基本可以排除文件 不一致造成的 -
@yofa2008 司徒大神都鴿了 暈哥的安卓掌機也...
-
@lovehex99 啊嘻,这……哈哈哈原来是这样,
-
司徒前些日子真的相當相當忙碌, 真的相當抱歉, 三年後的今天才又開始更新這個貼子~也相當欣慰 bankbank 還有持續聯繫司徒, 因此, 等後半段需要高手逆向 NeoGeo ROM 時, 司徒再來呼叫 bankbank, 哈, 這機器, 司徒已經三年沒有碰了, 因此, 每當夜裡總是會夢見暈哥在他的豪宅呼喚司徒, 該起來動一動了, 哈, 七月半, 不怕不怕, 哈, Gaviar 掌機還是處於開發階段, 因此, 最終樣貌會變成如何, 尚不得而知, 不過為了可以更方便的 Debug, 司徒決定先小改一下, 因此, OpenSCAD 畫了一個簡易底座
$fn = 50; module panel(ch) { hull() { cd = 3; translate([0, 0, 0]) cylinder(ch, cd, cd); translate([81.85, 0, 0]) cylinder(ch, cd, cd); translate([0, 32.75, 0]) cylinder(ch, cd, cd); translate([81.85, 32.75, 0]) cylinder(ch, cd, cd); } } difference() { union() { difference() { union() { hull() { ch = 4; cd = 3; translate([0, 0, 0]) cylinder(ch, cd, cd); translate([81.85 + 2, 0, 0]) cylinder(ch, cd, cd); translate([0, 32.75 + 2, 0]) cylinder(ch, cd, cd); translate([81.85 + 2, 32.75 + 2, 0]) cylinder(ch, cd, cd); } hull() { ch = 4; cd = 1; translate([-2, 0, 0]) cylinder(ch, cd, cd); translate([16, 0, 0]) cylinder(ch, cd, cd); translate([-2, -19, 0]) cylinder(ch, cd, cd); translate([16, -19, 0]) cylinder(ch, cd, cd); } translate([69.85, 0, 0]) hull() { ch = 4; cd = 1; translate([-2, 0, 0]) cylinder(ch, cd, cd); translate([16, 0, 0]) cylinder(ch, cd, cd); translate([-2, -19, 0]) cylinder(ch, cd, cd); translate([16, -19, 0]) cylinder(ch, cd, cd); } } translate([1, 1, 1]) panel(10); // socket translate([-2, -19, 0]) cube([18, 16, 4]); translate([67.85, -19, 0]) cube([18, 16, 4]); } // type-c translate([-2, -19, 0]) difference() { cube([19, 17, 4]); translate([0.25, 0, 1]) cube([17.5, 16, 10]); } translate([67.85, -19, 0]) union() { difference() { cube([19, 17, 4]); translate([0.25, 0, 1]) cube([17.5, 16, 10]); } } } // type-c translate([10.75, -10, 1]) cube([5, 10, 5]); translate([-5, -15.75, 2.5]) cube([10, 10, 5]); // speaker translate([73.5, -10, 1]) cube([6, 10, 5]); }預計外觀是這樣

拓竹3D印表機還是相當給力

使用三秒膠將該上的元件都補齊

將CH340E的+5V連接到這裡

相當短的接線

正面

下邊

側邊

上邊

側邊

完美的開發機

-
由於全志針對F133的開機設計流程過於複雜,因此,為了可以更精簡以及方便維護程式碼,司徒特別針對小志掌機修改了一版OpenSBI,修改後的流程如下所示

編譯步驟:
$ cd $ wget https://github.com/steward-fu/website/releases/download/gaviar/thead_toolchain.tar.gz $ tar xvf thead_toolchain.tar.gz $ sudo mv thead /opt $ export PATH=/opt/thead/bin:$PATH $ cd $ wget https://github.com/steward-fu/website/releases/download/gaviar/opensbi_20260906.tar.gz $ tar xvf opensbi_20260906.tar.gz $ cd opensbi $ export PLATFORM=allwinner/f133 $ export CROSS_COMPILE=riscv64-unknown-linux-gnu- $ make distclean $ CONFIG=BROM make $ python3 scripts/gen_checksum.py ./build/platform/allwinner/f133/firmware/fw_jump.bin fw_jump.bin $ dd if=fw_jump.bin of=payload/brom.bin bs=1024 count=32 $ rm -rf fw_jump.bin $ make distclean $ make $ python3 scripts/gen_checksum.py ./build/platform/allwinner/f133/firmware/fw_jump.bin payload/fw_jump.bin $ python3 scripts/gen_checksum.py ./build/platform/allwinner/f133/firmware/fw_payload.bin payload/fw_payload.bin $ sudo dd if=payload/brom.bin of=/dev/sdX bs=1024 seek=8 $ sudo dd if=payload/fw_jump.bin of=/dev/sdX bs=1024 seek=40 $ sudo dd if=dtb of=/dev/sdX bs=1024 seek=300 $ sudo dd if=Image of=/dev/sdX bs=1024 seek=400由於目前Kernel程式碼尚未完成,因此,司徒使用LED閃爍程式替代,開機後,OpenSBI會跑LED閃爍程式

Baudrate 115200bps
[UART] Gaviar Handheld [DRAM] ZQ value = 0x2f [DRAM] get_pmu_exist() = -1 [DRAM] ddr_efuse_type = 0xa [DRAM] trefi = 7.8ms [DRAM] single rank and full DQ! [DRAM] ddr_efuse_type = 0xa [DRAM] trefi = 7.8ms [DRAM] rank 0 row = 13 [DRAM] rank 0 bank = 4 [DRAM] rank 0 page size = 2 KB [DRAM] DRAM BOOT DRIVE INFO: v0.33 [DRAM] DRAM CLK = 528 MHz [DRAM] DRAM Type = 2 (2:DDR2, 3:DDR3) [DRAM] DRAMC read ODT off [DRAM] DRAM ODT off [DRAM] ddr_efuse_type = 0xa [DRAM] DRAM SIZE = 64M [DRAM] dram_tpr4 = 0x0 [DRAM] PLL_DDR_CTRL_REG = 0xf8002b00 [DRAM] DRAM_CLK_REG = 0xc0000000 [DRAM] MR2 = 0x0 [DRAM] DRAM simple test OK [eMMC] MicroSD size = 59688MB [eMMC] Copy DTB to 0x41500000 (size = 65536)... [eMMC] Copy Kernel to 0x40008000 (size = 8388608)... [eMMC] Copy OpenSBI to 0x41000000 (size = 262144)... Welcome to Gaviar handheld OpenSBI v1.3 ____ _____ ____ _____ / __ \ / ____| _ \_ _| | | | |_ __ ___ _ __ | (___ | |_) || | | | | | '_ \ / _ \ '_ \ \___ \| _ < | | | |__| | |_) | __/ | | |____) | |_) || |_ \____/| .__/ \___|_| |_|_____/|____/_____| | | |_| Platform Name : Allwinner F133 Platform Features : medeleg Platform HART Count : 1 Platform IPI Device : --- Platform Timer Device : --- @ 0Hz Platform Console Device : f133_uart Platform HSM Device : --- Platform PMU Device : --- Platform Reboot Device : --- Platform Shutdown Device : --- Platform Suspend Device : --- Platform CPPC Device : --- Firmware Base : 0x41000000 Firmware Size : 194 KB Firmware RW Offset : 0x20000 Firmware RW Size : 66 KB Firmware Heap Offset : 0x28000 Firmware Heap Size : 34 KB (total), 2 KB (reserved), 8 KB (used), 23 KB (free) Firmware Scratch Size : 4096 B (total), 728 B (used), 3368 B (free) Runtime SBI Version : 1.0 Domain0 Name : root Domain0 Boot HART : 0 Domain0 HARTs : 0* Domain0 Region00 : 0x0000000041000000-0x000000004101ffff M: (R,X) S/U: () Domain0 Region01 : 0x0000000041020000-0x000000004103ffff M: (R,W) S/U: () Domain0 Region02 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) Domain0 Next Address : 0x0000000040008000 Domain0 Next Arg1 : 0x0000000041500000 Domain0 Next Mode : S-mode Domain0 SysReset : yes Domain0 SysSuspend : yes Boot HART ID : 0 Boot HART Domain : root Boot HART Priv Version : v1.11 Boot HART Base ISA : rv64imafdcvx Boot HART ISA Extensions : zicntr Boot HART PMP Count : 8 Boot HART PMP Granularity : 2048 Boot HART PMP Address Bits: 38 Boot HART MHPM Count : 0 Boot HART MHPM Mask : 0x0 Boot HART MIDELEG : 0x0000000000000222 Boot HART MEDELEG : 0x000000000000b109 Jump to kernel (0x40008000) ...
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号