您尚未登录。

楼主 # 2021-06-10 21:35:30

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

研究FC3000掌機的開源可行性

簡要規格
CPU:M900 XCM2010GP40 (全志F1C100S)
RAM:32MB
屏幕:3.0吋 320x240解析度
卡槽:MicroSD
按鍵:十字鍵、4顆按鍵、Start、Select、L、R、電源鍵、音量鍵
USB:充電功能(並沒有連接到USB DP、DM)
電池:3.7V 1100mA或AAA x 3
尺寸:140mm x 68mm x 18mm
重量:110克

正面
1.jpg

下邊
2.jpg

側邊
3.jpg

上邊
4.jpg

側邊
5.jpg

相當感謝背包胖雄告知司徒這台掌機的存在,於是司徒上淘寶看了一下,發現一台才115 RMB,這也太便宜了吧!比起現今的開源掌機,動不動就350 RMB起跳,司徒覺得這麼貴的開源掌機已經變味了,強調的東西已經不是當初開源掌機訴求的模擬樂趣,反而是花錢收藏的詭異現象,除非是司徒相當喜愛的外觀(如:Wiz掌機),否則司徒有錢也不願意購買現今那種昂貴的掌機,不過可能太久沒有買掌機了,司徒竟然不小心,手滑買了4台FC3000掌機
1.jpg

這質感真的相當不錯,完全對得起這個價格
2.jpg

另一個配色也相當好看
3.jpg

Micro USB、AV輸出
4.jpg

沒有東西
5.jpg

L、R按鍵,這設計真是...
6.jpg

電源按鍵、音量按鍵
7.jpg

背面摸起來還蠻舒服的
8.jpg

這空間相當適合改機
9.jpg

電池和卡帶
10.jpg

BL-5C電池
11.jpg

這卡帶是用來回味童年的嗎?
12.jpg

背面
13.jpg

竟然有螺絲,不過,當看到時,已經被司徒爆力拆解了
14.jpg

A21?這難道是1MB記憶體擴充?
15.jpg

背面
16.jpg

司徒已經很久沒有看到這長的螺絲了...
17.jpg

A面
18.jpg

按鍵導電膠,這導電膠有點軟
19.jpg

十字鍵缺乏支撐點
21.jpg

正面
20.jpg

霧面屏
22.jpg

24Pin排線
23.jpg

PCB
24.jpg

背光電路
25.jpg

25Q064A
26.jpg

PCB
27.jpg

斜面喇吧
28.jpg

PCB
29.jpg

側邊
30.jpg

側邊
31.jpg

另一顆25Q064A
32.jpg

M900,其實仔細一看腳位,對照一下Miyoo電路圖,就知道是Allwinner F1C100S
1. 2腳、3腳短路
2. 30腳、31腳、32腳是DRAM-VCC
3. 51腳、52腳是振盪器
4. 59腳、60腳、61腳、62腳是啟動SPI Flash
33.jpg

Miyoo電路圖
34.jpg

LM4890、加密IC
35.jpg

MicroSD
36.jpg
37.jpg

這張MicroSDC看來只存放模擬器相關的東西
38.jpg

离线

楼主 #1 2021-06-10 22:27:14

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

原本的USB D-是接到PD0、D+是接到PD9
1.jpg
2.jpg

為了可以進行USB下載,司徒只好把線割了
3.jpg

跳線
4.jpg

接著短路SPI Flash第1腳跟第2腳,然後上電
5.jpg

進入燒錄模式

$ sudo dmesg -c
  [50227.418454] usb 1-1: USB disconnect, device number 115
  [50302.847603] usb 1-1: new full-speed USB device number 116 using xhci_hcd
  [50302.996616] usb 1-1: New USB device found, idVendor=1f3a, idProduct=efe8, bcdDevice= 2.b3
  [50302.996620] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0

$ lsusb
  Bus 001 Device 116: ID 1f3a:efe8 Onda (unverified) V972 tablet in flashing mode

离线

#2 2021-06-10 23:48:44

aozima
会员
所在地: 深圳
注册时间: 2019-05-25
已发帖子: 219
积分: 198.5
个人网站

Re: 研究FC3000掌機的開源可行性

前排点赞,在犹豫要不要入坑!

离线

#3 2021-06-11 08:13:28

三木同子
会员
注册时间: 2020-06-09
已发帖子: 23
积分: 21

Re: 研究FC3000掌機的開源可行性

不知道为什么图片都看不到

其实都有关注司徒的网站,但不知道更新了什么,每次都要先从github看时间,再去网站查看对应的更新
20210611081158.png

离线

楼主 #4 2021-06-11 08:47:57

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

哈,我這才領悟過來,原來GitHub是一座牆,我剛剛上傳一份website到Gitee,稍晚一點,我會把圖片Link都連結到Gitee,避免無法看到圖片的問題

至於GitHub更新的東西,我想說都只有我一個人在看,因此,我每次都寫init,哈,那我知道了,我之後Commit都盡量寫更新的內容是什麼

感謝告知

离线

楼主 #5 2021-06-11 09:02:34

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

我剛剛已經把GitHub圖片全部換成Gitee位址了,這樣應該就可以看到圖片了,如果有無法顯示的圖片,在告知我,感謝了~

离线

楼主 #6 2021-06-11 10:11:33

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

司徒量測了一下按鍵,發現沒有適合可用,因此,決定焊接一顆獨立燒錄按鍵,因此,找到一塊風水寶地
1.jpg

完成,之後只要按下按鍵開機,即可進入燒錄模式
2.jpg

進入燒錄模式
1.jpg

執行如下命令

$ sunxi-fel -p spiflash-read 0 8388608 boot_spiflash.img
  100% [================================================]  8389 kB,  193.6 kB/s

MicroSD Image
SPI Flash Image

离线

楼主 #7 2021-06-11 12:55:29

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

正所謂工欲善其事,必先利其器,目前已經確定CPU是F1C100S,也就是可以確定百分百可以把開源的東西移植上來,畢竟有荔枝派Nano這麼優秀的開源專案在,不過,如果可以把點屏的事情搞定,那才可以稱得上一部比較完美的開源掌機,因此,司徒參考暈哥其他篇文章關於JTAG的介紹,也製作了JTAG連接,這樣至少就可以開始單步除錯原廠的韌體程式


由於JTAG腳位與MicroSD卡腳位共用,但是,司徒量測後,發現有幾根腳位並沒有拉到MicroSD,因此,司徒只好找尋一下焊點
1.jpg

跳線
2.jpg

接著,請先拔掉JTAG的USB電源,然後,讓F1C100S進入燒錄模式,接著連接JATG USB電源
3.jpg

連接成功
4.jpg

离线

#8 2021-06-11 12:59:38

哇酷小二
管理员
注册时间: 2020-04-22
已发帖子: 2,293
积分: 1907

Re: 研究FC3000掌機的開源可行性

@司徒

可以试一试这个:


设计一片 SD NAND + JTAG(全志soc) 转接板    [切记切记0.8mm厚度]
https://whycan.com/t_2025.html

在线

楼主 #9 2021-06-11 13:08:50

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

@哇酷小二
恩,找時間來洗幾片這個轉板,這樣F1C100S、F1C200S和V3S都可以使用

我目前是手動焊接MicroSD JTAG轉板給Miyoo開發使用
7.jpg
1.jpg

离线

楼主 #10 2021-06-11 13:17:58

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

不然,使用MicroSD JTAG轉板可以相當方便連接,只可惜目前有些腳位沒有連接到MicroSD
5.jpg

离线

#11 2021-06-11 14:57:43

怀旧堂
会员
注册时间: 2021-06-11
已发帖子: 1
积分: 1.5

Re: 研究FC3000掌機的開源可行性

@司徒
听闻司徒大佬捣鼓新开源机,特意注册账号来膜拜大佬,
竟然也是100s,那不就是miyoo换壳么,
搞出来也和miyoo一样啊,大佬为何不直接再优化下miyoo的系统呢?

最近编辑记录 怀旧堂 (2021-06-11 15:00:07)

离线

楼主 #12 2021-06-11 15:23:50

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

哈,歡迎歡迎,PocketGo(小Miyoo橫板)在前些日子,解決閃屏問題後,不小心被我弄壞了,我心想應該也沒人在玩了,所以我就沒有放出任何測試韌體,也一直遲遲沒有再買第二台,最近是剛好胖熊告知我有可以折騰的新掌機,因此,我才買幾台玩玩,既然這樣的話,那就等FC3000移植Linux系統後,兩台掌機就一起更新,一起使用新系統好了,不過,你要先等我把FC3000玩透,哈,那你就持續關注進度好了

离线

#13 2021-06-11 16:32:31

xk100
会员
注册时间: 2018-12-13
已发帖子: 55
积分: 25.5

Re: 研究FC3000掌機的開源可行性

感谢分享。

离线

楼主 #14 2021-06-11 17:26:42

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

接著司徒把UART腳位也拉出來,方便Debug,原本官方韌體並沒有任何輸出訊息,應該是拿去當I/O使用,因此,司徒寫一個DRAM Size判斷,確定是F1C100S DRAM 32MB

UART1 TXD位置
1.jpg

UART1 RXD位置
4.jpg

UART0位置
2.jpg

司徒最後選擇焊接UART1,這樣可以跟Miyoo一樣使用UART1 Debug
3.jpg

离线

#15 2021-06-11 19:07:25

shawn.d
会员
注册时间: 2020-09-12
已发帖子: 136
积分: 130.5

Re: 研究FC3000掌機的開源可行性

看了这么些年司徒的帖子,司徒基本上还是这个套路。

离线

楼主 #16 2021-06-11 20:28:04

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

每個人在切入一個項目時,會著重在自己喜愛的技術之中,對我而言,從硬體 => 韌體 => 軟體是我想去看看的東西,因此,這也是我每次開始一個項目時的步驟,當然,這也是目前計算機的主要步驟,沒有對錯,自己喜愛就好

"套路"這個詞彙似乎是指詐騙的意思,對我而言,我並沒有任何教唆販賣的意圖,機器也跟我一點關係也沒有,我僅僅是貼出我的製作開源過程

离线

#17 2021-06-11 20:57:10

cube
会员
注册时间: 2021-03-11
已发帖子: 52
积分: 28

Re: 研究FC3000掌機的開源可行性

@司徒
司徒大佬别介意,"套路"在大陆我认为是中性词,没有感情色彩。

离线

楼主 #18 2021-06-11 21:14:56

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

@cube
哈,了解,感謝解答

司徒後來發現,MicroSD使用1 Bit傳輸方式,應該改成4 Bits,這樣至少就可以從MicroSD開機,也可以使用JTAG MicroSD轉板
1.jpg

現在終於可以透過MicroSD連線JTAG
2.jpg
P.S. 比較詭異的是,目前似乎無法從MicroSD開機

离线

#19 2021-06-11 23:03:09

sblpp
会员
注册时间: 2018-02-14
已发帖子: 118
积分: 105

Re: 研究FC3000掌機的開源可行性

感谢大佬分享

离线

#20 2021-06-11 23:23:48

三木同子
会员
注册时间: 2020-06-09
已发帖子: 23
积分: 21

Re: 研究FC3000掌機的開源可行性

shawn.d 说:

看了这么些年司徒的帖子,司徒基本上还是这个套路。

一步步记录,方便以后查看,特别是遇到问题后心路历程

Miyoo掌機 移植Linux系統和模擬器.pdf

Miyoo掌機 移植Linux系統和模擬器

离线

楼主 #21 2021-06-12 08:31:07

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

@三木同子
真心感謝幫忙整理這個文件

2018-12-27 ~ 2019-04-22是當初Miyoo開發開源的時間,在短短不到半年的時間,擠出那個開源系統,確實太倉促,很多東西都沒有好好製作,因此,此次結合FC3000以及小橫米(PocketGo),司徒會把整個開發開源的週期拉長到一年的時間,這次看看有無機會把一些系統以及模擬器都再次優化,意思就是,當大家進入whycan論壇時,就會常常看到這個貼子,哈

我也把當初移植Linux到Miyoo的過程放到GitHub,供需要的人可以參考
Miyoo掌機 移植Linux系統和模擬器.pdf

离线

#22 2021-06-12 08:43:48

shawn.d
会员
注册时间: 2020-09-12
已发帖子: 136
积分: 130.5

Re: 研究FC3000掌機的開源可行性

@司徒

没诈骗这个意思。是指固定作业模式。

离线

楼主 #23 2021-06-12 08:54:47

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

@shawn.d
哈,不好意思,誤會意思了

离线

楼主 #24 2021-06-12 09:26:17

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

接著,我們必須找出屏的初始化代碼,這樣才可以順利進到下一個步驟,不過,要找出初始化代碼是一個困難點,因為就司徒所知,官方韌體有加密IC保護,因此,我們有可能會被加密IC繞圈圈,不過,總是要先試試才知道困難點

接著開始Debug官方韌體程式,由於BROM只有32KB,加上韌體程式在前面就會把主要ROM複製到0x80000000,因此,抓前面32KB就可以,注意此時SPI Flash要燒錄官方原本的韌體,這樣才可以讓它加載到0x80000000

$ dd if=boot_spiflash.img of=loader.bin bs=1K count=32
  32+0 records in
  32+0 records out
  32768 bytes (33 kB, 32 KiB) copied, 0.000192325 s, 170 MB/s

接著拔除JTAG接線,讓F1C100S進入燒錄模式,接著連接JTAG並且使用如下命令載入程式
1.jpg

接著開啟J-Link GDB Server,記得選ARM9晶片
2.jpg

Listening on TCP/IP port 2331
3.jpg

接著使用IDA Pro載入loader.bin
4.jpg

Debugger > Switch debugger...
5.jpg

連接到localhost 2331
6.jpg

目前PC還是在BROM,設定斷點在0x00000000
7.jpg

按下F9,讓它跑到斷點位置
8.jpg

接著就可以開始單步
9.jpg

跳轉到0x81f80164
10.jpg

不知道是否為山寨板J-Link仿真器的問題,司徒發現,常常Debug到一半就跑飛了,哈,這叫我如何是好呢...

离线

#25 2021-06-12 09:53:20

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 研究FC3000掌機的開源可行性

司徒,不要debug了,这里有原始码,不要怀疑,这个loader的源头都在这里。
https://github.com/xboot/xboot/blob/master/src/arch/arm32/mach-f1c100s/start.S

离线

#26 2021-06-12 09:54:22

xboot
会员
注册时间: 2019-10-15
已发帖子: 262
积分: 190

Re: 研究FC3000掌機的開源可行性

	/* Initial system clock, ddr add uart */
	bl sys_clock_init
	bl sys_dram_init
	bl sys_uart_init

	/* Boot speed up, leave slower sram */
	adr r0, _start
	ldr r1, =_start
	cmp r0, r1
	beq _speedup
	ldr r0, =0x81f80000
	adr r1, _start
	ldr r2, =__spl_size
	bl memcpy
	ldr r0, =_speedup
	ldr r1, =_start
	sub r0, r0, r1
	ldr r1, =0x81f80000
	add r0, r0, r1
	mov pc, r0
_speedup:
	nop

	/* Copyself to link address */
	adr r0, _start
	ldr r1, =_start
	cmp r0, r1
	beq 1f
	bl sys_copyself
1:	nop

离线

#27 2021-06-12 10:03:53

哇酷小二
管理员
注册时间: 2020-04-22
已发帖子: 2,293
积分: 1907

Re: 研究FC3000掌機的開源可行性

@司徒
请问有原机flash固件吗?

在线

楼主 #28 2021-06-12 10:15:06

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

@xboot
我要找出屏的初始化代碼或者初始數據,我逆了一些代碼後,發現有一些代碼跟xboot很像,但是又不是完全一樣,你應該早點來的告訴我的,哈,這個FC3000掌機的作者應該是在你的xboot QQ群,你可以幫我問下,是否可以給我屏的初始化代碼嗎?這樣我就可以跳過這個步驟,繼續往下走,哈,不然,要找出屏的初始化代碼,可能會花上一些時間,感謝啦


@哇酷小二
這個屏應該是CPU Interface,你看看可不可以幫忙找出TCON設定以及輸出那段在哪?感謝啦
SPI Flash Image

离线

#29 2021-06-12 10:30:22

luali
会员
注册时间: 2021-04-24
已发帖子: 4
积分: 2

Re: 研究FC3000掌機的開源可行性

CPU接口的3寸24pin的320x240,掐指一算可能是st7789
司徒可以尝试一下量第3脚,看看是不是背光

离线

楼主 #30 2021-06-12 10:48:45

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

@luali
敢問閣下是否為加藤鷹傳人,你這一掐指果真厲害,屏的背光控制是第三腳位沒錯,由PE6腳位控制,那這樣我用ST7789來點屏看看,感謝

測試代碼

  .global _start
   
  .equ GPIO_BASE, 0x01c20800 
  .equ PE_CFG0,   (GPIO_BASE + (4 * 0x24) + 0x00)
  .equ PE_DATA,   (GPIO_BASE + (4 * 0x24) + 0x10)
    
  .arm
  .text
_start:
  .long 0xea000016
  .byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
  .long 0, __spl_size
  .byte 'S', 'P', 'L', 2
  .long 0, 0
  .long 0, 0, 0, 0, 0, 0, 0, 0
  .long 0, 0, 0, 0, 0, 0, 0, 0
    
_vector:
  b reset
  b .
  b .
  b .
  b .
  b .
  b .
  b .
    
reset:
  ldr r0, =PE_CFG0
  ldr r1, =0x1000000
  str r1, [r0]
  
  ldr r0, =PE_DATA
0:
  ldr r2, =100000
1:
  subs r2, #1
  bne 1b
  eor r1, #(1 << 6)
  str r1, [r0]
  b 0b
  .end

可以成功控制屏的背光
1.jpg
2.jpg

离线

#31 2021-06-12 11:38:27

luali
会员
注册时间: 2021-04-24
已发帖子: 4
积分: 2

Re: 研究FC3000掌機的開源可行性

@司徒
假如第三脚是背光的话,引脚定义如下所示。其他你懂的:
1 VDD
2 GND
3 LEDA
4 /RESET
5 /CS
6 /RS
7 /WR
8 /RD
9 DB0
10 DB1
11 DB2
12 DB3
13 DB4
14 DB5
15 DB6
16 DB7
17 DB8
18 DB9
19 DB10
20 DB11
21 DB12
22 DB13
23 DB14
24 DB15

离线

#32 2021-06-12 14:50:03

cube
会员
注册时间: 2021-03-11
已发帖子: 52
积分: 28

Re: 研究FC3000掌機的開源可行性

1👈哈0OpdX6isw3P信  https://m.tb.cn/h.4ubAd45?sm=c24df6   十年老店FC3000掌上游戏机V2私模M3掌机复古SUP拳皇儿童双人手柄


司徒大佬,是这个吗?

离线

楼主 #33 2021-06-12 16:31:13

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

@cube
是這一款沒有錯,我買的是V1版本,價格是115 RMB,你這個太貴了,建議你找更便宜的買,最好低於115 RMB,哈

离线

楼主 #34 2021-06-12 16:35:01

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

目前使用ST7789的初始化代碼測試,發現還是無法點亮這個屏,而量測後的屏腳位,我也感覺怪怪的,因為那個DB順序好像有點故意把高低5 Bits做交換,雖然我也測試了高低5 Bits交換,但是,還是一樣點不亮這個屏,不過,就目前量測的腳位來看,這個屏沒有TS腳位(Tear),所以這個屏應該是有閃屏問題才是,目前F1C100S系列掌機(PocketGo, Miyoo, Q90, V90, Trimui),就我可以看到的資料,就只有PocketGo是可以解掉閃屏問題,因為它有TS腳位

Pin-01 VDD
Pin-02 GND
Pin-03 LEDA PE6
Pin-04 RST  PE11
Pin-05 CS   PD21
Pin-06 RS   PD19
Pin-07 WR   PD18
Pin-08 VDD
Pin-09 DB11 PD13
Pin-10 DB12 PD14
Pin-11 DB13 PD15
Pin-12 DB14 PD16
Pin-13 DB15 PD17
Pin-14 DB5  PD6
Pin-15 DB6  PD7
Pin-16 DB7  PD8
Pin-17 DB8  PD10
Pin-18 DB9  PD11
Pin-19 DB10 PD12
Pin-20 DB0  PD1
Pin-21 DB1  PD2
Pin-22 DB2  PD3
Pin-23 DB3  PD4
Pin-24 DB4  PD5

測試代碼

  .global _start
  
  .equiv PIO_BASE,  0x01c20800 
  .equiv PD,        (0x24 * 3)
  .equiv PE,        (0x24 * 4)
  .equiv PIO_CFG0,  0x00
  .equiv PIO_CFG1,  0x04
  .equiv PIO_CFG2,  0x08
  .equiv PIO_DATA,  0x10

  .equiv LCD_CS,    (1 << 21)
  .equiv LCD_RS,    (1 << 19)
  .equiv LCD_WR,    (1 << 18)
  .equiv LCD_RST,   (1 << 11)
  .equiv LCD_BL,    (1 << 6)
  
  /*
  Pin-01 VDD
  Pin-02 GND
  Pin-03 LEDA PE6
  Pin-04 RST  PE11
  Pin-05 CS   PD21
  Pin-06 RS   PD19
  Pin-07 WR   PD18
  Pin-08 VDD
  Pin-09 DB11 PD13
  Pin-10 DB12 PD14
  Pin-11 DB13 PD15
  Pin-12 DB14 PD16
  Pin-13 DB15 PD17
  Pin-14 DB5  PD6
  Pin-15 DB6  PD7
  Pin-16 DB7  PD8
  Pin-17 DB8  PD10
  Pin-18 DB9  PD11
  Pin-19 DB10 PD12
  Pin-20 DB0  PD1
  Pin-21 DB1  PD2
  Pin-22 DB2  PD3
  Pin-23 DB3  PD4
  Pin-24 DB4  PD5
  */

  .arm
  .text
_start:
  .long 0xea000016
  .byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
  .long 0, __spl_size
  .byte 'S', 'P', 'L', 2
  .long 0, 0
  .long 0, 0, 0, 0, 0, 0, 0, 0
  .long 0, 0, 0, 0, 0, 0, 0, 0
   
_vector:
  b reset
  b .
  b .
  b .
  b .
  b .
  b .
  b .
   
reset:
  mov sp, #0x1000
  ldr r1, =0x11111111
  ldr r4, =PIO_BASE + PD
  str r1, [r4, #PIO_CFG0]
  str r1, [r4, #PIO_CFG1]
  str r1, [r4, #PIO_CFG2]

  ldr r4, =PIO_BASE + PE
  str r1, [r4, #PIO_CFG0]
  str r1, [r4, #PIO_CFG1]

  ldr r1, =0xffffffff
  ldr r4, =PIO_BASE + PD
  str r1, [r4, #PIO_DATA]

  ldr r4, =PIO_BASE + PE
  str r1, [r4, #PIO_DATA]

  bl lcd_rst

  ldr r0, =0x11
  bl lcd_cmd

  ldr r0, =1000
  bl delay
  
  ldr r0, =0x36
  bl lcd_cmd
  ldr r0, =0xb0
  bl lcd_dat

  ldr r0, =0x3a
  bl lcd_cmd
  ldr r0, =0x05
  bl lcd_dat
    
  ldr r0, =0x2a
  bl lcd_cmd
  ldr r0, =0x00
  bl lcd_dat
  ldr r0, =0x00
  bl lcd_dat
  ldr r0, =0x01
  bl lcd_dat
  ldr r0, =0x3f
  bl lcd_dat

  ldr r0, =0x2b
  bl lcd_cmd
  ldr r0, =0x00
  bl lcd_dat
  ldr r0, =0x00
  bl lcd_dat
  ldr r0, =0x00
  bl lcd_dat
  ldr r0, =0xef
  bl lcd_dat
      
  ldr r0, =0xb2
  bl lcd_cmd
  ldr r0, =116
  bl lcd_dat
  ldr r0, =16
  bl lcd_dat
  ldr r0, =0x01
  bl lcd_dat
  ldr r0, =0x33
  bl lcd_dat
  ldr r0, =0x33
  bl lcd_dat
  
  ldr r0, =0xb7
  bl lcd_cmd
  ldr r0, =0x35
  bl lcd_dat

  ldr r0, =0xb8
  bl lcd_cmd
  ldr r0, =0x2f
  bl lcd_dat
  ldr r0, =0x2b
  bl lcd_dat
  ldr r0, =0x2f
  bl lcd_dat
        
  ldr r0, =0xbb
  bl lcd_cmd
  ldr r0, =0x15
  bl lcd_dat
  
  ldr r0, =0xc0
  bl lcd_cmd
  ldr r0, =0x3c
  bl lcd_dat
      
  ldr r0, =0x35
  bl lcd_cmd
  ldr r0, =0x00
  bl lcd_dat
  
  ldr r0, =0xc2
  bl lcd_cmd
  ldr r0, =0x01
  bl lcd_dat

  ldr r0, =0xc3
  bl lcd_cmd
  ldr r0, =0x13
  bl lcd_dat

  ldr r0, =0xc4
  bl lcd_cmd
  ldr r0, =0x20
  bl lcd_dat

  ldr r0, =0xc6
  bl lcd_cmd
  ldr r0, =0x07
  bl lcd_dat

  ldr r0, =0xd0
  bl lcd_cmd
  ldr r0, =0xa4
  bl lcd_dat
  ldr r0, =0xa1
  bl lcd_dat
  
  ldr r0, =0xe8
  bl lcd_cmd
  ldr r0, =0x03
  bl lcd_dat

  ldr r0, =0xe9
  bl lcd_cmd
  ldr r0, =0x0d
  bl lcd_dat
  ldr r0, =0x12
  bl lcd_dat
  ldr r0, =0x00
  bl lcd_dat

  ldr r0, =0xe0
  bl lcd_cmd
  ldr r0, =0xd0
  bl lcd_dat
  ldr r0, =0x08
  bl lcd_dat
  ldr r0, =0x10
  bl lcd_dat
  ldr r0, =0x0d
  bl lcd_dat
  ldr r0, =0x0c
  bl lcd_dat
  ldr r0, =0x07
  bl lcd_dat
  ldr r0, =0x37
  bl lcd_dat
  ldr r0, =0x53
  bl lcd_dat
  ldr r0, =0x4c
  bl lcd_dat
  ldr r0, =0x39
  bl lcd_dat
  ldr r0, =0x15
  bl lcd_dat
  ldr r0, =0x15
  bl lcd_dat
  ldr r0, =0x2a
  bl lcd_dat
  ldr r0, =0x2d
  bl lcd_dat

  ldr r0, =0xe1
  bl lcd_cmd
  ldr r0, =0xd0
  bl lcd_dat
  ldr r0, =0x0d
  bl lcd_dat
  ldr r0, =0x12
  bl lcd_dat
  ldr r0, =0x08
  bl lcd_dat
  ldr r0, =0x08
  bl lcd_dat
  ldr r0, =0x15
  bl lcd_dat
  ldr r0, =0x34
  bl lcd_dat
  ldr r0, =0x34
  bl lcd_dat
  ldr r0, =0x4a
  bl lcd_dat
  ldr r0, =0x36
  bl lcd_dat
  ldr r0, =0x12
  bl lcd_dat
  ldr r0, =0x13
  bl lcd_dat
  ldr r0, =0x2b
  bl lcd_dat
  ldr r0, =0x2f
  bl lcd_dat

  ldr r0, =0x29
  bl lcd_cmd
  ldr r0, =0x2c
  bl lcd_cmd

  ldr r4, =640
  ldr r5, =0xf800
0:
  mov r0, r5
  bl lcd_dat
  subs r4, #1
  bne 0b

  ldr r4, =PIO_BASE + PE
  ldr r5, =0xffffffff
0:
  eor r5, #LCD_BL
  str r5, [r4, #PIO_DATA]
  ldr r0, =50000
  bl delay
  b 0b

delay:
  push {lr}
0:
  subs r0, #1
  bne 0b
  pop {pc}

lcd_rst:
  push {r4, r5, lr}
  ldr r4, =PIO_BASE + PE
  ldr r5, =0xffffffff
  str r5, [r4, #PIO_DATA]
  ldr r0, =10000
  bl delay

  bic r5, #LCD_RST
  str r5, [r4, #PIO_DATA]
  ldr r0, =10000
  bl delay

  orr r5, #LCD_RST
  str r5, [r4, #PIO_DATA]
  ldr r0, =10000
  bl delay
  pop {r4, r5, pc}

lcd_wr:
  push {r4, r5, lr}
  ldr r4, =PIO_BASE + PD

  /*
  mov r2, r0, lsl #11
  and r2, #(0x1f << 11)
  mov r3, r0, lsr #11
  and r3, #0x1f
  orr r2, r3
  and r3, r0, #0x7e0
  orr r2, r3
  mov r0, r2
  */

  and r2, r0, #0x00ff
  and r3, r0, #0xff00
  lsl r2, #1
  lsl r3, #2

  mov r5, #0
  orr r5, r1
  orr r5, r2
  orr r5, r3
  str r5, [r4, #PIO_DATA]
  ldr r0, =100
  bl delay
  
  bic r5, #LCD_WR
  str r5, [r4, #PIO_DATA]
  ldr r0, =100
  bl delay
  
  orr r5, #LCD_WR | LCD_CS
  str r5, [r4, #PIO_DATA]
  ldr r0, =100
  bl delay
  pop {r4, r5, pc}

lcd_dat:
  push {lr}
  mov r1, #LCD_WR | LCD_RS
  bl lcd_wr
  pop {pc}

lcd_cmd:
  push {lr}
  mov r1, #LCD_WR
  bl lcd_wr
  pop {pc}
  .end

离线

楼主 #35 2021-06-13 21:58:32

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

正所謂風水輪流轉,一定有其道理,人的一生,總是高低起伏,在低處得到的經驗總是特別珍貴,今天司徒就來訴說一下得到的經驗值(F1C100S超頻到1.2GHz)

基本上,可以使用如下幾種方式,把屏的初始化資料找出來:
1. 使用J-Link Debug官方韌體程式
2. 使用QEMU跑官方韌體程式,然後把存取暫存器的內容Dump出來 (不過需要破解加密IC)
3. 使用邏輯分析儀

雖然第一種方式是司徒覺得最好的方式,可惜那個山寨J-Link在Debug官方韌體程式時,常常跑飛,所以目前只能先放棄第一種方式,至於第二種方式,看似簡單,不過需要花一些時間,雖然司徒在最新版QEMU有找到支援Orangepi-PC開發板(Allwinner H3),不過要改成F1C100S還是需要一點點時間,所以司徒接下來想測試一下邏輯分析儀的部份,不過司徒手上剛好沒有專用的邏輯分析儀,因此,司徒想使用芒果派F1C200S來當作分析儀使用,於是開始製作過程

括除焊點
1.jpg

勇敢的芒果派站了出來
2.jpg

腳位

Pin-01 VDD
Pin-02 GND
Pin-03 LEDA PE6
Pin-04 RST  PE11
Pin-05 CS   PD21
Pin-06 RS   PD19  => (F1C200S)PD12
Pin-07 WR   PD18  => (F1C200S)PD0
Pin-08 VDD
Pin-09 DB11 PD13  => (F1C200S)PE11
Pin-10 DB12 PD14  => (F1C200S)PA0
Pin-11 DB13 PD15  => (F1C200S)PA1
Pin-12 DB14 PD16  => (F1C200S)PA2
Pin-13 DB15 PD17  => (F1C200S)PA3
Pin-14 DB5  PD6   => (F1C200S)PE5
Pin-15 DB6  PD7   => (F1C200S)PE6
Pin-16 DB7  PD8   => (F1C200S)PE7
Pin-17 DB8  PD10  => (F1C200S)PE8
Pin-18 DB9  PD11  => (F1C200S)PE9
Pin-19 DB10 PD12  => (F1C200S)PE10
Pin-20 DB0  PD1   => (F1C200S)PE0
Pin-21 DB1  PD2   => (F1C200S)PE1
Pin-22 DB2  PD3   => (F1C200S)PE2
Pin-23 DB3  PD4   => (F1C200S)PE3
Pin-24 DB4  PD5   => (F1C200S)PE4

跳線
3.jpg
4.jpg

測試程式

  .global _start
     
  .equiv CCU_BASE,              0x01c20000
  .equiv GPIO_BASE,             0x01c20800
  .equiv UART1_BASE,            0x01c25400
  
  .equiv PLL_PERIPH_CTRL_REG,   0x0028
  .equiv AHB_APB_HCLKC_CFG_REG, 0x0054
  .equiv BUS_CLK_GATING_REG2,   0x0068
  .equiv BUS_SOFT_RST_REG2,     0x02d0
   
  .equiv PA,                    (0x24 * 0)
  .equiv PB,                    (0x24 * 1)
  .equiv PC,                    (0x24 * 2)
  .equiv PD,                    (0x24 * 3)
  .equiv PE,                    (0x24 * 4)
 
  .equiv PORT_CFG0,             0x00
  .equiv PORT_CFG1,             0x04
  .equiv PORT_CFG2,             0x08
  .equiv PORT_DATA,             0x10
  .equiv PORT_PUL0,             0x1c
  .equiv PORT_PUL1,             0x20
 
  .equiv UART_RBR,              0x00
  .equiv UART_DLL,              0x00
  .equiv UART_DLH,              0x04
  .equiv UART_IER,              0x04
  .equiv UART_IIR,              0x08
  .equiv UART_LCR,              0x0c
  .equiv UART_MCR,              0x10
  .equiv UART_USR,              0x7c
  
  .arm
  .text
_start:
  .long 0xea000016
  .byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
  .long 0, __spl_size
  .byte 'S', 'P', 'L', 2
  .long 0, 0
  .long 0, 0, 0, 0, 0, 0, 0, 0
  .long 0, 0, 0, 0, 0, 0, 0, 0
    
_vector:
  b reset
  b .
  b .
  b .
  b .
  b .
  b .
  b .
 
reset:
  ldr r0, =CCU_BASE
  ldr r1, =0x80041800
  str r1, [r0, #PLL_PERIPH_CTRL_REG]
  ldr r1, =0x00003180
  str r1, [r0, #AHB_APB_HCLKC_CFG_REG]
 
  ldr r4, =GPIO_BASE
  mov r1, #0x00000000
  str r1, [r4, #(PA + PORT_CFG0)]
  str r1, [r4, #(PC + PORT_CFG0)]
  str r1, [r4, #(PD + PORT_CFG0)]
  str r1, [r4, #(PD + PORT_CFG1)]
  str r1, [r4, #(PE + PORT_CFG0)]
  str r1, [r4, #(PE + PORT_CFG1)]
  ldr r1, =0x55555555
  str r1, [r4, #(PD + PORT_PUL0)]
  str r1, [r4, #(PD + PORT_PUL1)]
  str r1, [r4, #(PE + PORT_PUL0)]
  str r1, [r4, #(PE + PORT_PUL1)]
 
  ldr r5, =0x4000
  ldr r6, =64
 
  mov r1, #0
  mov r2, r5
  mov r3, r6
0:
  str r1, [r2]
  add r2, #4
  subs r3, #4
  bne 0b
 
  ldr r4, =GPIO_BASE
0:
  ldr r1, [r4, #(PD + PORT_DATA)]
  ands r1, #(1 << 0)
  bne 0b
 
  mov r1, #0
  ldr r2, [r4, #(PD + PORT_DATA)]
  and r2, #(1 << 12)
  lsl r2, #20
  orr r1, r2
  ldr r2, [r4, #(PA + PORT_DATA)]
  and r2, #0x07
  lsl r2, #12
  orr r1, r2
  ldr r2, [r4, #(PE + PORT_DATA)]
  ldr r3, =0x7ff
  and r2, r3
  orr r1, r2
  str r1, [r5]
1:
  ldr r1, [r4, #(PD + PORT_DATA)]
  ands r1, #(1 << 0)
  beq 1b
 
  add r5, #4
  subs r6, #4
  bne 0b
  
  bl uart_init
   
  ldr r0, =0x11223344
  bl uart_4byte
 
  ldr r5, =0x4000
  ldr r6, =64
0:
  ldr r0, [r5]
  bl uart_4byte
 
  ldr r0, =0xaa
  bl uart_byte
 
  add r5, #4
  subs r6, #4
  bne 0b
  b .
  
uart_init:
  push {r4, lr}
  ldr r4, =CCU_BASE
  ldr r1, =(1 << 21)
  str r1, [r4, #BUS_CLK_GATING_REG2]
  str r1, [r4, #BUS_SOFT_RST_REG2]
   
  ldr r4, =GPIO_BASE
  ldr r1, =0x5500
  str r1, [r4, #(PA + PORT_CFG0)]
 
  ldr r4, =UART1_BASE
  ldr r1, =0x00
  str r1, [r4, #UART_IER]
  ldr r1, =0xf7
  str r1, [r4, #UART_IIR]
  ldr r1, =0x00
  str r1, [r4, #UART_MCR]
  ldr r1, [r4, #UART_LCR]
  orr r1, #(1 << 7)
  str r1, [r4, #UART_LCR]
  ldr r1, =54
  str r1, [r4, #UART_DLL]
  ldr r1, =0x00
  str r1, [r4, #UART_DLH]
  ldr r1, [r4, #UART_LCR]
  bic r1, #(1 << 7)
  str r1, [r4, #UART_LCR]
  ldr r1, [r4, #UART_LCR]
  bic r1, #0x1f
  orr r1, #0x03
  str r1, [r4, #UART_LCR]
  pop {r4, pc}
   
uart_byte:
  push {r4, lr}
  ldr r4, =UART1_BASE
1:
  ldr r1, [r4, #UART_USR]
  tst r1, #(1 << 1)
  beq 1b
  strb r0, [r4, #UART_RBR]
  pop {r4, pc}
 
uart_4byte:
  push {r4, lr}
  mov r4, r0
  lsr r0, #24
  bl uart_byte
   
  mov r0, r4
  lsr r0, #16
  bl uart_byte
   
  mov r0, r4
  lsr r0, #8
  bl uart_byte
   
  mov r0, r4
  bl uart_byte
  pop {r4, pc}
  .end

P.S. PA3先拔除

但是詭異的事情發生了,每次量測到的資料竟然都不一樣
5.jpg

於是,司徒寫了一個GPIO Toggle量測
6.jpg

F1C200S I/O速度只有2.8MHz...
8.jpg

屏的LCD_WR速度則是4.7MHz,難怪取出來的資料每次都不一樣,因為,最低取樣頻率至少要是原生的兩倍...
7.jpg

司徒心想,這種事情嚇不倒我,從小被嚇到大,CPU 602MHz跑不動,那就幫你超頻到900MHz,總該脫胎換骨了吧!於是,劇情繼續往下走...

VCC_CORE電壓足夠,才可以做超頻的動作,VCC_CORE是由EA3036供電,目前是1.2V
1.jpg

電壓計算方式如下,從公式可以得知,只要把R13改成75K,輸出電壓就可以變成 0.6 * (150K / 75K) + 0.6 = 1.8V
3.jpg

絲印位置
2.jpg

幸好司徒有夠多芒果派開發板...
4.jpg

焊接
5.jpg

確定電壓是1.8V
6.jpg

CPU速度計算公式

PLL = (24MHz*N*K)/(M*P)

N = 13
K = 4
M = 1
P = 1
PLL = (24MHz*13*4)/(1*1) = 1248MHz

測試程式

  .global _start
     
  .equiv CCU_BASE,              0x01c20000
  .equiv GPIO_BASE,             0x01c20800
  
  .equiv PLL_CPU_CTRL_REG,      0x0000
  .equiv PLL_PERIPH_CTRL_REG,   0x0028
  .equiv AHB_APB_HCLKC_CFG_REG, 0x0054
  .equiv BUS_CLK_GATING_REG2,   0x0068
  .equiv BUS_SOFT_RST_REG2,     0x02d0
   
  .equiv PD,                    (0x24 * 3)
  .equiv PORT_CFG0,             0x00
  .equiv PORT_CFG1,             0x04
  .equiv PORT_CFG2,             0x08
  .equiv PORT_DATA,             0x10
  .equiv PORT_PUL0,             0x1c
  .equiv PORT_PUL1,             0x20
 
  .arm
  .text
_start:
  .long 0xea000016
  .byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
  .long 0, __spl_size
  .byte 'S', 'P', 'L', 2
  .long 0, 0
  .long 0, 0, 0, 0, 0, 0, 0, 0
  .long 0, 0, 0, 0, 0, 0, 0, 0
    
_vector:
  b reset
  b .
  b .
  b .
  b .
  b .
  b .
  b .
 
reset:
  ldr r4, =CCU_BASE
  ldr r1, =(1 << 31) | (12 << 8) | (3 << 4)
  str r1, [r4, #PLL_CPU_CTRL_REG]
0:
  ldr r1, [r4, #PLL_CPU_CTRL_REG]
  tst r1, #(1 << 28)
  beq 0b
 
  ldr r1, =(1 << 31) | (1 << 18) | (31 << 8)
  str r1, [r4, #PLL_PERIPH_CTRL_REG]
0:
  ldr r1, [r4, #PLL_PERIPH_CTRL_REG]
  tst r1, #(1 << 28)
  beq 0b
 
  ldr r1, =(3 << 12)
  str r1, [r4, #AHB_APB_HCLKC_CFG_REG]
 
  ldr r4, =GPIO_BASE
  mov r1, #1
  str r1, [r4, #(PD + PORT_CFG0)]
0:
  eor r1, #1
  str r1, [r4, #(PD + PORT_DATA)]
  b 0b
  .end

接著測量一下I/O速度
7.jpg

I/O速度為2.8MHz,不過CPU速度已經可以跑到1.2GHz,如果電壓再繼續增加,司徒相信CPU還可以操到更高,因為官方說最高可以到2.6GHz
8.jpg

司徒心想,端午節吃完粽子,應該可以繼續開幹...

离线

#36 2021-06-13 22:38:15

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 683
积分: 653.5

Re: 研究FC3000掌機的開源可行性

非常欣赏司徒的探索精神,比打怪升级还过瘾!!!  持续关注

离线

楼主 #37 昨天 12:28:25

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

今天是端午佳節,祝福大家端午快樂,小弟再次贈上一個實驗數據,F1C100S CORE 2.4V 可以超頻到2.0GHz ,過程如下分析


既然官方說最高可以超頻到2.6GHz,那最高到底可以超到多少呢?基於這個好奇心,司徒決定研究一下超頻,因此,司徒找來芒果四兄弟
9.jpg

首先挺身而出的是芒果大哥,大哥深知,超頻可以會讓自己變成一隻燒雞,剛好今天是端午佳節,明年的今天可能會是自己的清明節...
10.jpg

由於司徒並沒有太多精密電阻做分壓測試,因此,趕緊從隔壁找來老王協助
11.jpg

為了避免發生榨妻的嫌疑,司徒量測一下老王的電壓,果然,老王還是無法信任...
12.jpg

遺憾的是,司徒手上剛好沒有溫度測量器,因此,勇敢的五姊妹挺身而出,由二姐負責量測...
13.jpg

芒果派果然值得信任,固定輸出1.2V
14.jpg

接著,司徒開始從1.8V測試
15.jpg

啟動後,吃掉0.05V
16.jpg

確定LED可以閃爍,代表此時的CPU頻率是可以工作的
17.jpg

測試程式

  .global _start
     
  .equiv CCU_BASE,              0x01c20000
  .equiv GPIO_BASE,             0x01c20800
  
  .equiv PLL_CPU_CTRL_REG,      0x0000
  .equiv PLL_PERIPH_CTRL_REG,   0x0028
  .equiv AHB_APB_HCLKC_CFG_REG, 0x0054
  .equiv BUS_CLK_GATING_REG2,   0x0068
  .equiv BUS_SOFT_RST_REG2,     0x02d0
   
  .equiv PA,                    (0x24 * 0)
  .equiv PORT_CFG0,             0x00
  .equiv PORT_DATA,             0x10
 
  .arm
  .text
_start:
  .long 0xea000016
  .byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
  .long 0, __spl_size
  .byte 'S', 'P', 'L', 2
  .long 0, 0
  .long 0, 0, 0, 0, 0, 0, 0, 0
  .long 0, 0, 0, 0, 0, 0, 0, 0
    
_vector:
  b reset
  b .
  b .
  b .
  b .
  b .
  b .
  b .
 
reset:
  ldr r4, =CCU_BASE
  ldr r1, =(1 << 31) | (20 << 8) | (3 << 4)
  str r1, [r4, #PLL_CPU_CTRL_REG]
0:
  ldr r1, [r4, #PLL_CPU_CTRL_REG]
  tst r1, #(1 << 28)
  beq 0b
 
  ldr r0, =GPIO_BASE
  ldr r1, =0x1000
  str r1, [r0, #(PA + PORT_CFG0)]
0:
  eor r1, #8
  str r1, [r0, #(PA + PORT_DATA)]
  ldr r2, =1000000
1:
  subs r2, #1
  bne 1b
  b 0b
  .end

P.S. 在最早的測試,司徒忘記N最大只有到31,因此,在此次測試,司徒先把K設定成3,然後依序調整N,上面的程式:24MHz * N * K = 24MHz * 21 * 4 = 2016MHz

接著就開始慢慢調整電壓測試,找出該CPU頻率下,最低可以接受的電壓
18.jpg

二姐持續量測溫度...
19.jpg

最後,司徒測試發現,電壓2.4V時,CPU可以超頻到2016MHz,此時CPU還可以正常運作,不過已經呈現發燙的狀態(可憐的二姐),可以加上散熱片使用,而電壓再往上增加時,CPU已經無法運作
20.jpg

最後,芒果四兄弟依然健在
21.jpg

幸好二姐也平安無事
22.jpg

23.jpg

F1C200S在2.0GHz下,I/O速度可以多快呢?答案是7MHz
24.jpg

离线

楼主 #38 昨天 12:41:42

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

如果F1C100S可以長時間運作在2.0GHz下,那這顆CPU也真是有無窮的潛力,這樣小橫米(PocketGo)要跑順PS1模擬器,看來日子不遠已!

离线

#39 昨天 14:04:52

unturned3
会员
注册时间: 2020-07-01
已发帖子: 102
积分: 77

Re: 研究FC3000掌機的開源可行性

大佬,为什么表格里的频率单位是Hz?不应该是MHz吗?

还真不知道 arm926ej-s 能超频到2GHz…… 大佬们真是要彻底榨干这颗芯片啊

离线

楼主 #40 昨天 14:30:21

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

@unturned3
感謝告知,已經修正

哈,一定要把它榨乾,初期的硬件研究,有助於後期軟件系統的開發,慢慢來,一步一步研究,看看可以將F1C100S發揮到什麼樣的程度

离线

#41 昨天 14:40:32

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 683
积分: 653.5

Re: 研究FC3000掌機的開源可行性

v3s是不是也能上2g

离线

#42 昨天 15:01:23

shawn.d
会员
注册时间: 2020-09-12
已发帖子: 136
积分: 130.5

Re: 研究FC3000掌機的開源可行性

司徒 说:

如果F1C100S可以長時間運作在2.0GHz下,那這顆CPU也真是有無窮的潛力,這樣小橫米(PocketGo)要跑順PS1模擬器,看來日子不遠已!

ddr ram会是一个问题,它跑不快。

离线

#43 昨天 15:15:59

thindcna
会员
注册时间: 2020-04-25
已发帖子: 19
积分: 10.5

Re: 研究FC3000掌機的開源可行性

这个研究很有趣

离线

楼主 #44 昨天 15:54:50

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

@kekemuyu
V3S 目前還沒有特別研究還不清楚

@shawn.d
我看XBOOT代碼,在DRAM初始化時,目前頻率設定在156MHz,不過它竟然有一個設定判斷是1GHz,哈,目前我沒有找到DRAM的相關文件,如果有文件,請告知我,感謝

离线

楼主 #45 昨天 20:45:03

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

司徒目前還是處於低潮,不過,物極必反,司徒相信應該快要可以飛龍在天了~

司徒目前準備使用STM32F103當作邏輯分析儀使用,因此,使用STM32F103開發板,Toggle I/O測試一下,發現速度只有別人的2/3,雖然目前這個速度應該是夠用,不過如果有人知道問題在哪,在麻煩告知一下司徒,過程如下說明

Ref: https://stackoverflow.com/questions/59708656/stm32f103c8-gpio-speed-limit

STM32F103測試程式(PLL 128MHz)

  .thumb
  .cpu cortex-m3
  .syntax unified
    
  .equiv GPIOA_CRL,    0x40010800
  .equiv GPIOA_CRH,    0x40010804
  .equiv GPIOA_IDR,    0x40010808
  .equiv GPIOA_ODR,    0x4001080c
 
  .equiv GPIOC_CRL,    0x40011000
  .equiv GPIOC_CRH,    0x40011004
  .equiv GPIOC_IDR,    0x40011008
  .equiv GPIOC_ODR,    0x4001100c
 
  .equiv RCC_CR,       0x40021000
  .equiv RCC_CFGR,     0x40021004
  .equiv RCC_APB2ENR,  0x40021018
 
  .equiv FLASH_ACR,    0x40022000
 
  .equiv STACKINIT,    0x20005000
     
  .global _start
  .section .text
 
  .org 0x0
  .word STACKINIT
  .word _start
   
  .org 0x100
  .align 2
  .thumb_func
_start:
  bl rcc_init
  bl flash_init
   
  ldr r4, =RCC_APB2ENR
  ldr r1, =(1 << 2)
  str r1, [r4]
  
  ldr r4, =GPIOA_CRH
  ldr r1, =(3 << 0)
  str r1, [r4]
  
  ldr r4, =GPIOA_ODR
  ldr r1, =0xffffffff
  ldr r2, =0x00000000
0:
  str r1, [r4]
  str r2, [r4]
 
  @eor r2, #(1 << 8)
  @str r2, [r4]
  b 0b
   
  .align 2
  .thumb_func
rcc_init:
  push {r4, lr}
  ldr r4, =RCC_CR
  mov r1, #(1 << 16)
  str r1, [r4]
0:
  ldr r1, [r4]
  tst r1, #(1 << 17)
  bne 0b
 
  ldr r4, =RCC_CFGR
  @mov r1, #(7 << 18) @ 72MHz
  mov r1, #(14 << 18) @ 128MHz
  orr r1, #(1 << 16)
  str r1, [r4]
 
  ldr r4, =RCC_CR
  ldr r1, [r4]
  orr r1, #(1 << 24)
  str r1, [r4]
0:
  ldr r1, [r4]
  tst r1, #(1 << 25)
  bne 0b
 
  ldr r4, =RCC_CFGR
  ldr r1, [r4]
  orr r1, #2
  str r1, [r4]
0:
  ldr r1, [r4]
  tst r1, #(1 << 3)
  bne 0b
  pop {r4, pc}
 
  .align
  .thumb_func
flash_init:
  push {r4, lr}
  ldr r4, =FLASH_ACR
  mov r1, #0x32
  str r1, [r4]
  pop {r4, pc}
  .end

PA8輸出
4.jpg

PLL 72MHz時,I/O Toggle可以達到12MHz,不過,stackoverflow的人說可以達到18MHz
1.jpg

PLL 128MHz時,I/O Toggle可以達到21MHz,不過,stackoverflow的人說可以達到36MHz
2.jpg

值得注意的是eor指令比str指令更耗時間,多了一倍指令週期,如下是PLL 128MHz時,使用eor指令的I/O Toggle速度
3.jpg

离线

#46 昨天 21:08:20

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 683
积分: 653.5

Re: 研究FC3000掌機的開源可行性

发现司徒的测试代码都是汇编,最近在研究汇编,向大神看齐

最近编辑记录 kekemuyu (昨天 21:09:07)

离线

楼主 #47 昨天 23:06:23

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

以下純屬個人看法

在有限的時間內,盡可能去學習Assembly,才能夠更貼近你想看的那個東西,更了解它,
因為Assembly是最接近機器的語言,不過卻是離你最遠的語言

或許有人認為司徒老掉牙,還在守舊,現今GNU GCC編譯器只要打開O3旗標,
用C語言都可以寫的比你的Assembly還要高效率

關鍵技術總是藏在底層,選擇看什麼東西或者寫什麼東西,那是個人自由,
埋藏在GNU GCC後面的東西,你可能不知道,或許也不想知道,總之,技術就是藏在別人手上

有些人寫出來的C語言總是特別高效,但是,有些人寫出來的C語言效率卻是相當糟糕,
這其中的奧妙不知道有幾個人仔細想過

學習Assembly,不見得要放棄C語言,學習東西不是在為了要放棄另一個東西做準備

總之,學習態度、處事態度,決定一切,也決定你的人生走向

共勉之~

离线

#48 今天 00:01:53

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 683
积分: 653.5

Re: 研究FC3000掌機的開源可行性

从来不以功利目的去学习技术,只是跟随兴趣。学习汇编也是对计算机底层的兴趣,从学编程的第一天开始就对操作系统、编译原理感兴趣。
最近研究汇编也是为了学习写汇编器、编译器。前几天刚把avr的汇编器的词法分析部分写完。写汇编器之前,想参考一下开源的汇编器,发现除了gcc的,很少有人专门写一个汇编器了(除了cpu设计公司,甚至他们也是给gcc写个后端)。有意思的是看到了一个avr的开源汇编器是pascal写的,分析了一下竟然没有按照编译原理写,硬是靠自己的想法堆出来了。它的地址:http://www.avr-asm-tutorial.net/gavrasm/index_en.html,有兴趣可以看一下。

最近编辑记录 kekemuyu (今天 00:08:40)

离线

楼主 #49 今天 08:37:11

司徒
Moderator
注册时间: 2020-02-13
已发帖子: 37
积分: 14.5
个人网站

Re: 研究FC3000掌機的開源可行性

哈,對於編譯器,我也是相當感興趣,只是一直沒有花太多時間在這個上面,
我想找一個比C4更簡單的編譯器且容易了解的編譯器代碼,最好不要使用工具像Yacc Flex,如果你有發現這樣的項目,再請告知我,感謝

离线

#50 今天 12:49:55

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 683
积分: 653.5

Re: 研究FC3000掌機的開源可行性

如果不介意编程语言,我推荐《编译器设计之路》这本书。这是一本实战的书,里面有pascal编译器的完整实现及源码。代码量不大,很适合入门。
这个编译器的源码是c++实现,源码地址:https://sourceforge.net/projects/neopascal/
860062803.jpg

最近编辑记录 kekemuyu (今天 12:52:56)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn