F1C200S >> Assembly
如何超頻到2.0GHz
參考資料:
1. pdf
2. lichee
3. mangopi_r
4. allwinner
VCC_CORE電壓足夠,才可以做超頻的動作,VCC_CORE是由EA3036供電,目前是1.2V
電壓計算方式如下,從公式可以得知,只要把R13改成75K,輸出電壓就可以變成 0.6 * (150K / 75K) + 0.6 = 1.8V
絲印位置
料雞已經就位
焊接
確定電壓是1.8V
CPU速度計算公式
PLL = (24MHz*N*K)/(M*P) N = 13 K = 4 M = 1 P = 1 PLL = (24MHz*13*4)/(1*1) = 1248MHz
main.s
.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速度
I/O速度為2.8MHz,不過CPU速度已經可以跑到1.2GHz,如果電壓再繼續增加,司徒相信CPU還可以操到更高,因為官方說最高可以到2.6GHz
既然官方說最高可以超頻到2.6GHz,那最高到底可以超到多少呢?基於這個好奇心,司徒決定研究一下超頻,因此,司徒找來芒果四兄弟
首先挺身而出的是芒果大哥,大哥深知,超頻可以會讓自己變成一隻燒雞,剛好今天是端午佳節,明年的今天可能會是自己的清明節...
由於司徒並沒有太多精密電阻做分壓測試,因此,趕緊從隔壁找來老王協助
為了避免發生榨妻的嫌疑,司徒量測一下老王的電壓,果然,老王還是無法信任...
遺憾的是,司徒手上剛好沒有溫度測量器,因此,勇敢的五姊妹挺身而出,由二姐負責量測...
芒果派果然值得信任,固定輸出1.2V
接著,司徒開始從1.8V測試
啟動後,吃掉0.05V
確定LED可以閃爍,代表此時的CPU頻率是可以工作的
測試程式
.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頻率下,最低可以接受的電壓
二姐持續量測溫度...
最後,司徒測試發現,電壓2.4V時,CPU可以超頻到2016MHz,此時CPU還可以正常運作,不過已經呈現發燙的狀態(可憐的二姐),可以加上散熱片使用,而電壓再往上增加時,CPU已經無法運作
因此,司徒整理一下F1C100S超頻表格
CORE電壓 | CPU頻率 | 人體溫度量測 | CPU設定 |
---|---|---|---|
1.20v | 480MHz | 正常 | PLL_CPU_CTRL_REG = (1 << 31) | (4 << 8) | (3 << 4) |
1.20v | 576MHz | 正常 | PLL_CPU_CTRL_REG = (1 << 31) | (5 << 8) | (3 << 4) |
1.20v | 672MHz | 正常 | PLL_CPU_CTRL_REG = (1 << 31) | (6 << 8) | (3 << 4) |
1.20v | 768MHz | 正常 | PLL_CPU_CTRL_REG = (1 << 31) | (7 << 8) | (3 << 4) |
1.20v | 864MHz | 正常 | PLL_CPU_CTRL_REG = (1 << 31) | (8 << 8) | (3 << 4) |
1.20v | 960MHz | 正常 | PLL_CPU_CTRL_REG = (1 << 31) | (9 << 8) | (3 << 4) |
1.20v | 1056MHz | 正常 | PLL_CPU_CTRL_REG = (1 << 31) | (10 << 8) | (3 << 4) |
1.30v | 1152MHz | 正常 | PLL_CPU_CTRL_REG = (1 << 31) | (11 << 8) | (3 << 4) |
1.35v | 1248MHz | 微微溫 | PLL_CPU_CTRL_REG = (1 << 31) | (12 << 8) | (3 << 4) |
1.45v | 1344MHz | 微微溫 | PLL_CPU_CTRL_REG = (1 << 31) | (13 << 8) | (3 << 4) |
1.55v | 1440MHz | 微微溫 | PLL_CPU_CTRL_REG = (1 << 31) | (14 << 8) | (3 << 4) |
1.65v | 1536MHz | 微微溫 | PLL_CPU_CTRL_REG = (1 << 31) | (15 << 8) | (3 << 4) |
1.75v | 1632MHz | 微微溫 | PLL_CPU_CTRL_REG = (1 << 31) | (16 << 8) | (3 << 4) |
1.95v | 1728MHz | 微微溫 | PLL_CPU_CTRL_REG = (1 << 31) | (17 << 8) | (3 << 4) |
2.00v | 1824MHz | 微溫 | PLL_CPU_CTRL_REG = (1 << 31) | (18 << 8) | (3 << 4) |
2.20v | 1920MHz | 溫~燙 | PLL_CPU_CTRL_REG = (1 << 31) | (19 << 8) | (3 << 4) |
2.40v | 2016MHz | 發燙 | PLL_CPU_CTRL_REG = (1 << 31) | (20 << 8) | (3 << 4) |
最後,芒果四兄弟依然健在
幸好二姐也平安無事
F1C200S在2.0GHz下,I/O速度可以多快呢?答案是7MHz
同場加映,司徒決定測試一下F1C100S超頻的持久度,這問題,真是一個老男人心中的痛...,於是,司徒找來幾顆精密電阻,0.6 * (464K / 150K) + 0.6 = 2.456V
2.456V,雖然多了0.056V,不過應該差不多,這個電壓是司徒之前測試,F1C100S最大可以承受的電壓
接著,司徒再度詢問芒果四兄弟,此時,勇敢的二哥二話不說,馬上挺身而出
移除R12、R13
0.6 * (464K / 150K) + 0.6 = 2.456V,司徒也幫二哥焊接一顆光明燈,期許實驗平安順利
既然,芒果都由二哥出戰了,於是司徒詢問三姐的意願,三姐說它不適合拍照,司徒不相信,要求三姐給一張照片證明
恩,三姐還是不要出戰好了,不然,司徒可能會變成殘障人士...
於是,司徒請來金大哥,聽說金大哥練過金鐘罩...
開始測驗,CPU=2016MHz,二哥忍耐一下,馬上就可以脫離苦海了...
二哥的光明燈開始閃爍
6秒後...,芒果二哥終於離開人間,再怎麼連接USB,都無法進入燒錄模式,願二哥安祥...
於是,司徒找來另外的精密電阻,442K電阻配上160K電阻,0.6 * (442K / 160K) + 0.6 = 2.2575V
此時,三哥默默走了出來,司徒替三哥治裝...,0.6 * (442K / 160K) + 0.6 = 2.2575V
三哥開始...
CPU=2016MHz,10秒後掛點,不過插入USB,還是可以進入燒錄模式,因此,電壓2.2575V是不會燒毀F1C100S的保險電壓,而司徒測試CPU=1920MHz,三哥竟然撐過60秒,三哥真男人
60秒後,二姐馬上量測溫度,果然會燙...
於是,小護士準備幫三哥打針,可惜司徒臨時找不到散熱片...
那就只好電風扇伺候...
二姐測量溫度,果然還是有點燙,不過,CPU=1920MHz,跑了三分鐘,依然沒有問題,因此,司徒覺得1920MHz,加上散熱片,應該是可以拿來使用的
僅存的芒果三兄弟
結論:
CPU=2016MHz,需要找出臨界電壓,容易燒毀,不建議使用
CPU=1920MHz,F1C100S加上散熱片,可以跑,不過目前只有測試GPIO Toggle