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.20v480MHz正常PLL_CPU_CTRL_REG = (1 << 31) | (4 << 8) | (3 << 4)
1.20v576MHz正常PLL_CPU_CTRL_REG = (1 << 31) | (5 << 8) | (3 << 4)
1.20v672MHz正常PLL_CPU_CTRL_REG = (1 << 31) | (6 << 8) | (3 << 4)
1.20v768MHz正常PLL_CPU_CTRL_REG = (1 << 31) | (7 << 8) | (3 << 4)
1.20v864MHz正常PLL_CPU_CTRL_REG = (1 << 31) | (8 << 8) | (3 << 4)
1.20v960MHz正常PLL_CPU_CTRL_REG = (1 << 31) | (9 << 8) | (3 << 4)
1.20v1056MHz正常PLL_CPU_CTRL_REG = (1 << 31) | (10 << 8) | (3 << 4)
1.30v1152MHz正常PLL_CPU_CTRL_REG = (1 << 31) | (11 << 8) | (3 << 4)
1.35v1248MHz微微溫PLL_CPU_CTRL_REG = (1 << 31) | (12 << 8) | (3 << 4)
1.45v1344MHz微微溫PLL_CPU_CTRL_REG = (1 << 31) | (13 << 8) | (3 << 4)
1.55v1440MHz微微溫PLL_CPU_CTRL_REG = (1 << 31) | (14 << 8) | (3 << 4)
1.65v1536MHz微微溫PLL_CPU_CTRL_REG = (1 << 31) | (15 << 8) | (3 << 4)
1.75v1632MHz微微溫PLL_CPU_CTRL_REG = (1 << 31) | (16 << 8) | (3 << 4)
1.95v1728MHz微微溫PLL_CPU_CTRL_REG = (1 << 31) | (17 << 8) | (3 << 4)
2.00v1824MHz微溫PLL_CPU_CTRL_REG = (1 << 31) | (18 << 8) | (3 << 4)
2.20v1920MHz溫~燙PLL_CPU_CTRL_REG = (1 << 31) | (19 << 8) | (3 << 4)
2.40v2016MHz發燙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


返回上一頁