S3C6410,Tiny6410,Mini6410,MoblieDDR內存驅動

++++++++++++++++++++++++++++++++++++++++++

本文系本站原創,歡迎轉載! 轉載請註明出處:

http://blog.csdn.net/mr_raptor/article/details/6621741

++++++++++++++++++++++++++++++++++++++++++

 

1.       概述

S3C6410內存控制器是採用的PL340內存控制芯片。AMBA APB3.0接口協議規定,可以通過編程將AXI從總線接口和APB主總線接口進行橋接,實現二者總線上的數據的傳輸。

 

DRAM控制器可以通過配置兼容SDRAM類型芯片。通過向DRAM控制器中PL340寫入內存芯片配置參數,內存時序,來控制內存工作。

 

DRAM控制器可以直接從SDRAM或DRAM接收一個控制命令。通過將操作命令寫入direct_cmd寄存器,操作SDRAM進行對應操作。通過向memc_cmd寄存器寫入狀態模式命令,使DRAM控制器進入對應的工作模式。例如:向direct_cmd寄存器寫入:Prechargeall’,‘Autorefresh’,‘NOP’,and ‘MRS’ 等命令,可以讓SDRAM芯片分別執行不同操作,向memc_cmd寄存器寫入一些狀態命令可以讓SDRAM芯片進入’Config’, ‘Ready’, and ‘Low_power’等工作模式。

 

DRAM控制器支持兩種節能模式。當SDRAM處於不活動狀態並且持續一定的時鐘週期時,DRAM控制器會自動將SDRAM進入預充電節能模式或正常節能模式下以降低系統功耗。當驅動操作DRAM控制器進入對應的STOP(停止),Deep Stop(深度睡眠),Sleep Mode(睡眠)等模式時,SDRAM芯片進入自刷新的節能模式。

l  支持SDR SDRAM,Mobile SDR SDRAM,DDR SDRAM和Mobile DDR SDRAM類型芯片

l  支持兩個內存芯片

l  支持64位的AMBA AXI總線類型

l  支持16位、64位內存總線

n  存儲器接口1:支持16位DDR SDRAM和Mobile DDR SDRAM類型芯片

 支持32位DDR SDRAM,Mobile DDR SDRAM,Mobile SDR SDRAM和SDR SDRAM類型芯片

不支持16位Mobile SDR SDRAM和SDR SDRAM類型芯片

l  地址空間:存儲器接口1支持最多2Gb地址空間

l  支持正常節能模式和預充電的節能模式

l  數據傳輸低延遲特性

l  外部存儲器總線優化

l  通過設置SFR寄存器支持選擇外部存儲器選型

l  通過SFR寄存器配置存儲器的時序

l  支持擴展MRS指令集

l  工作電壓:存儲器接口1:   1.8V,2.5V

 

2.       SDRAM類型內存接口

DRAM控制器支持最多兩個相同類型的內存芯片,每個芯片最大容量256M。所有芯片共享相同引腳(時鐘使能引腳和片選引腳除外),如表1-1所示給出了DRAM控制器的外部存儲器引腳配置信息。

 

3.       SDRAM初始化

在系統上電後,必須通過軟件配置SDRAM接入DRAM控制器並且初始化DRAM控制器,下面給出DDR、MOBILE DDR SDRAM的初始化流程。

a)         向mem_cmd寄存器寫入0b10,使其進入NOP工作狀態

b)         向mem_cmd寄存器寫入0b00,使其進入Prechargeall(整片預充電)工作狀態

c)         向mem_cmd寄存器寫入0b11,使其進入Autorefresh(自刷新)工作狀態

d)         再次向mem_cmd寄存器寫入0b11,使其進入Autorefresh(自刷新)工作狀態

e)         向mem_cmd寄存器寫入0b10,使其進入MRS工作狀態,並且地址空間內的EMRS必須置位

f)          再次向mem_cmd寄存器寫入0b10,使其進入MRS工作狀態,並且地址空間內的MRS必須置位

 

4.       DRAM寄存器

1)         DRAM控制器狀態寄存器(P1MEMSTAT)

 

P1MEMSTAT

描述

初始值

保留

[31:9]

-

-

芯片數量

[8:7]

內存控制器支持的芯片最大數量:

01 = 2片

6410只支持2片芯片,初始化爲只讀的01

01

芯片類型

[6:4]

內存控制器支持的芯片類型:

100 = MSDR/SDR/MDDR/DDR中任一類型

100

芯片位寬

[3:2]

接入內存芯片的位寬:

00 = 16位  01 = 32位

10 = 保留  11 = 保留

01

控制器狀態

[1:0]

DRAM控制器狀態:

00 = Config配置狀態

01 = Ready就緒狀態

10 = Pause暫停狀態

11 = Low-Power節能狀態

00

實際上,讀到的有用信息就是Controller Status和Memory width。

 

2)         DRAM控制器命令寄存器(P1MEMCCMD)

 

P1MEMCCMD

描述

初始值

保留

[31:3]

未定義,寫入0

-

Memc_cmd

[2:0]

設置內存控制器的工作狀態:

000 = Go

001 = sleep

010 = wakeup

011 = Pause

100 = Configure

101~111 = 保留

 

最開始應該配置爲0x4,是處於Configure狀態。在配置完所有的DRAM之後,將該寄存器設置爲0x0,處於運行狀態。

 

3)         直接命令寄存器(P1DIRECTCMD)

 

P1DIRECTCMD

描述

初始值

保留

[31:23]

未定義,寫入0

 

擴展內存命令

[22]

(見下表)

 

芯片號

[21:20]

映射到外部存儲芯片地址的位

 

命令

[19:18]

具體命令(見下表)

 

Bank地址

[17:16]

當以MRS或EMRS命令訪問時,映射到外部存儲器的Bank地址位

 

 

[15:14]

未定義,寫入0

 

地址線0~13

[13:0]

當以MRS或EMRS命令訪問時,映射到外部存儲器的內存地址位

 

用於發送命令到DRAM和訪問DRAM中的MRS和EMRS寄存器。通過該寄存器初始化DRAM,先設置爲NOP模式,然後設置爲PrechargeAll進行充電,然後設置EMRS和MRS寄存器,一般是這麼一個流程。具體的要參見你所使用的DRAM的datasheet。

 

4)         內存配置寄存器(P1MEMCFG)

 

P1MEMCFG

描述

初始值

保留

[31:23]

未定義

 

啓動芯片

[22]

使能下面數量的芯片開始執行刷新操作:

00 = 1芯片

01 = 2芯片

10/11 = 保留

00


QoS master位

[20:18]

設置QoS值:

000 = ARID[3:0]

001= ARID[4:1]

010 = ARID[5:2]

011 = ARID[6:3]

100 = ARID[7:4]

101~111 = 保留

000

內存突發訪問

[17:15]

在內存讀寫時,設置突發訪問數據的數量:

000 = 突發訪問1個數據

001 = 突發訪問2個數據

010 = 突發訪問4個數據

011 = 突發訪問8個數據

100 = 突發訪問16個數據

101~111 = 保留

該值必須通過DIRECTORYCMD寄存器,寫入到內存的模式寄存器中,並且數據必須匹配

010

Bank地址

[17:16]

當以MRS或EMRS命令訪問時,映射到外部存儲器的Bank地址位

 

Stop_mem_clock

[14]

當停止芯片時鐘,不允許訪問內存數據時,置位

0

自動節能

[13]

當該位置位時,芯片自動進入節能狀態

0

關閉芯片延遲時間

[12:7]

當關閉內存芯片時,延遲的時鐘個數

000000

自動預充電位

[6]

內存地址中自動預充電位的位置:

0 = ADDR[10]

1 = ADDR[8]

0

行地址位數

[5:3]

AXI地址線上的行地址位數:

000 = 11位

001 = 12位

010 = 13位

011 = 14位

100 = 15位

101= 16位

100

列地址位數

[2:0]

AXI地址線上的列地址位數:

000 = 8位

001 = 9位

010 = 10位

011 = 11位

100 = 12位

000

參考DRAM的datasheet。

 

5)         內存刷新時間寄存器(P1REFRESH)

 

P1REFRESH

描述

初始值

 

[31:15]

-

 

刷新時間

[14:0]

內存刷新時鐘週期數

0xA60

 

6)         CAS 延遲寄存器(P1CASLAT)

 

P1CASLAT

描述

初始值

 

[31:4]

-

-

CAS延遲

[3:1]

列地址選通延遲內存時鐘週期數

0xA60

CAS HALF週期

[0]

設置CAS延遲數是否爲半個內存時鐘週期

0 = 以[3:1]設置數爲CAS延遲時鐘週期

1 = 以[3:1]設置數的一半爲CAS延遲時鐘週期

0

參考DRAM的datasheet。

 

下面13個寄存器用於DRAM操作中所需時間和延時寄存器,具體可以參考PL340文檔。

7)         T_DQSS寄存器(P1T_DQSS)

 

P1T_DQSS

描述

初始值

 

[31:2]

-

-

t_DQSS

[1:0]

寫入DQS的時鐘週期

1

 

8)         T_MRD寄存器(P1T_MRD)

 

P1T_MRD

描述

初始值

 

[31:7]

-

-

t_ MRD

[6:0]

設置模式寄存器命令時間(內存時鐘週期爲單位)

0x02

 

9)         T_RAS寄存器(P1T_RAS)

 

P1T_RAS

描述

初始值

 

[31:4]

-

-

t_RAS

[3:0]

設置行地址選通到預充電操作延遲時間(內存時鐘週期爲單位)

0x7

 

10)     T_RC寄存器(P1T_RC)

 

P1T_RC

描述

初始值

 

[31:4]

-

-

t_RC

[3:0]

設置激活內存Bank x到激活另外一個Bank x操作的延遲時間(內存時鐘週期爲單位)

0xB

 

11)     T_RCD寄存器(P1T_RCD)

 

P1T_RCD

描述

初始值

 

[31:6]

-

-

Scheduled_RCD

[5:3]

設置t_RCD-3

011

t_RCD

[2:0]

設置RAS到CAS操作的最小延遲時間(內存時鐘週期爲單位)

101

 

12)     T_RFC寄存器(P1T_RFC)

 

P1T_RFC

描述

初始值

 

[31:10]

-

-

Scheduled_RFC

[9:5]

設置t_RFC-3

0x10

t_RFC

[4:0]

設置自動刷新命令操作延遲時間(內存時鐘週期爲單位)

0x12

 

13)     T_RP寄存器(P1T_RP)

 

P1T_RP

描述

初始值

 

[31:6]

-

-

Scheduled_RP

[5:3]

設置t_RP-3

011

t_RFC

[2:0]

設置預充電到RAS操作的延遲時間(內存時鐘週期爲單位)

101

 

14)     T_RRD寄存器(P1T_RRD)

 

P1T_ RRD

描述

初始值

 

[31:4]

-

-

t_RRD

[3:0]

設置激活內存Bank x到激活內存Bank y操作的延遲時間(內存時鐘週期爲單位)

0x2

 

15)     T_WR寄存器(P1T_WR)

 

P1T_ WR

描述

初始值

 

[31:3]

-

-

t_WR

[2:0]

設置寫入數據到預充電操作的延遲時間(內存時鐘週期爲單位)

011

 

16)     T_WTR寄存器(P1T_WTR)

 

P1T_ WTR

描述

初始值

 

[31:3]

-

-

t_WTR

[2:0]

設置寫入數據到讀取數據操作的延遲時間(內存時鐘週期爲單位)

011

 

17)     T_XP寄存器(P1T_XP)

 

P1T_ XP

描述

初始值

 

[31:8]

-

-

t_XP

[7:0]

設置退出關閉電源命令的延遲時間(內存時鐘週期爲單位)

0x1

 

18)     T_XSR寄存器(P1T_XSR)

 

P1T_ XSR

描述

初始值

 

[31:8]

-

-

t_XSR

[7:0]

設置退出自刷新命令的延遲時間(內存時鐘週期爲單位)

0xA

 

19)     T_ESR寄存器(P1T_ESR)

 

P1T_ ESR

描述

初始值

 

[31:8]

-

-

t_ESR

[7:0]

設置自刷新命令的延遲時間(內存時鐘週期爲單位)

0x14

 

內存初始化代碼:

(開發環境爲ADS1.2)

[plain] view plaincopy
  1. MEM_SYS_CFG                                        EQU                    0x7e00f120                    
  2.   
  3. DMC1_BASE                                             EQU                     0x7e001000          
  4.   
  5. INDEX_DMC_MEMC_STATUS                   EQU           0x0  
  6.   
  7. INDEX_DMC_MEMC_CMD                      EQU           0x4  
  8.   
  9. INDEX_DMC_DIRECT_CMD                      EQU           0x08  
  10.   
  11. INDEX_DMC_MEMORY_CFG                  EQU        0x0c  
  12.   
  13. INDEX_DMC_REFRESH_PRD                   EQU           0x10  
  14.   
  15. INDEX_DMC_CAS_LATENCY                     EQU           0x14  
  16.   
  17. INDEX_DMC_T_DQSS                              EQU           0x18  
  18.   
  19. INDEX_DMC_T_MRD                               EQU           0x1c  
  20.   
  21. INDEX_DMC_T_RAS                                 EQU           0x20  
  22.   
  23. INDEX_DMC_T_RC                                   EQU           0x24  
  24.   
  25. INDEX_DMC_T_RCD                                 EQU           0x28  
  26.   
  27. INDEX_DMC_T_RFC                                 EQU           0x2c  
  28.   
  29. INDEX_DMC_T_RP                                   EQU           0x30  
  30.   
  31. INDEX_DMC_T_RRD                                 EQU           0x34  
  32.   
  33. INDEX_DMC_T_WR                                  EQU           0x38  
  34.   
  35. INDEX_DMC_T_WTR                               EQU           0x3c  
  36.   
  37. INDEX_DMC_T_XP                                    EQU           0x40  
  38.   
  39. INDEX_DMC_T_XSR                                 EQU           0x44  
  40.   
  41. INDEX_DMC_T_ESR                          EQU           0x48  
  42.   
  43. INDEX_DMC_MEMORY_CFG2                 EQU           0x4C  
  44.   
  45. INDEX_DMC_CHIP_0_CFG                     EQU           0x200  
  46.   
  47. INDEX_DMC_CHIP_1_CFG                     EQU           0x204  
  48.   
  49. INDEX_DMC_CHIP_2_CFG                      EQU           0x208  
  50.   
  51. INDEX_DMC_CHIP_3_CFG                     EQU           0x20C  
  52.   
  53. INDEX_DMC_USER_STATUS                    EQU           0x300  
  54.   
  55. INDEX_DMC_USER_CONFIG                   EQU           0x304  
  56.   
  57. AREA LOW_INIT, CODE, READONLY  
  58.   
  59.          ENTRY  
  60.   
  61. EXPORT mem_init  
  62.   
  63. mem_init  
  64.   
  65.          ldr     r0, =MEM_SYS_CFG              ;Memory sussystem address 0x7e00f120  
  66.   
  67.          mov  r1, #0xd                                   ;Xm0CSn2 = NFCON CS0 設置NAND Flash爲存儲器  
  68.   
  69.          str     r1, [r0]  
  70.   
  71.    
  72.   
  73.          ldr     r0, =DMC1_BASE                   ;DMC1 base address 0x7e001000  
  74.   
  75.         ;  memc_cmd : 010  wake up  
  76.   
  77.         ; 喚醒內存  
  78.   
  79.          ldr     r1, =0x04  
  80.   
  81.          str     r1, [r0, #INDEX_DMC_MEMC_CMD]  
  82.   
  83.            
  84.   
  85.          ; Refresh period = ((Startup_HCLK / 1000 * DDR_tREFRESH) - 1) / 1000000  -> DDR_tREFRESH 7800 ns  
  86.   
  87.          ; HCLK = 133MHz    
  88.   
  89. ; DDR內存規格規定,電容的電荷存儲上限時間爲64ms,而刷新操作每次是針對  
  90.   
  91. ; 一行進行的,即每一行的刷新時間爲64ms,而內存芯片中一定數量的行  
  92.   
  93. ; 以L-Bank表示(見內存工作原理與物理特性),每個L-Bank有8192行(見內存硬件手冊)  
  94.   
  95. ; 因此對L-Bank的刷新操作應該在64ms /8192 = 7813us時間內進行一次  
  96.   
  97. ; 而MDDR工作在133MHz時,其一個時鐘週期爲1/133M,那麼一次L-Bank刷新  
  98.   
  99. ; 時間需要7.8us/1/133M個時鐘週期,即有下面的公式:  
  100.   
  101. ;                 Refresh_Count = tREFRESH * HCLK(MHz)/1000  
  102.   
  103. ;  tREFRESH = 7813   HCLK = 133   Refresh_Count = 1039  
  104.   
  105.    
  106.   
  107.          ldr     r1, = 1039                                       ; DMC_DDR_REFRESH_PRD  
  108.   
  109.          str     r1, [r0, #INDEX_DMC_REFRESH_PRD]  
  110.   
  111.            
  112.   
  113.          ; CAS_Latency = DDR_CASL<<1            -> DDR_CASL 3  
  114.   
  115.          ldr     r1, = 6                                            ; DMC_DDR_CAS_LATENCY  
  116.   
  117.          str     r1, [r0, #INDEX_DMC_CAS_LATENCY]  
  118.   
  119.            
  120.   
  121.          ; t_DQSS (clock cycles)  
  122.   
  123.          ldr     r1, = 1                                              ; DMC_DDR_t_DQSS  
  124.   
  125.          str     r1, [r0, #INDEX_DMC_T_DQSS]  
  126.   
  127.    
  128.   
  129.          ; T_MRD  (clock cycles)  
  130.   
  131.          ldr     r1, = 2                                              ; DMC_DDR_t_MRD  
  132.   
  133.          str     r1, [r0, #INDEX_DMC_T_MRD]  
  134.   
  135.    
  136.   
  137.          ; T_RAS (clock cycles)  
  138.   
  139.          ldr     r1, = 7                                              ; DMC_DDR_t_RAS  
  140.   
  141.          str     r1, [r0, #INDEX_DMC_T_RAS]  
  142.   
  143.    
  144.   
  145.          ; T_RC Active Bank x to Active Bank x delay(clock cycles)  
  146.   
  147.          ldr     r1, = 10                                            ; DMC_DDR_t_RC  
  148.   
  149.          str     r1, [r0, #INDEX_DMC_T_RC]  
  150.   
  151.    
  152.   
  153.          ; T_RCD RAS to CAD delay(clock cycles)  
  154.   
  155.          ldr     r1, = 4                                              ; DMC_DDR_t_RCD  
  156.   
  157.          ldr     r2, = 8                                             ; DMC_DDR_schedule_RCD  
  158.   
  159.          orr     r1, r1, r2  
  160.   
  161.          str     r1, [r0, #INDEX_DMC_T_RCD]  
  162.   
  163.    
  164.   
  165.          ; T_RFC AutoRefresh(clock cycles)  
  166.   
  167.          ldr     r1, = 11                                           ; DMC_DDR_t_RFC  
  168.   
  169.          ldr     r2, = 256                                          ; DMC_DDR_schedule_RFC  
  170.   
  171.          orr     r1, r1, r2  
  172.   
  173.          str     r1, [r0, #INDEX_DMC_T_RFC]  
  174.   
  175.    
  176.   
  177.          ; T_RP Precharge to RAS delay(clock cycles)  
  178.   
  179.          ldr     r1, = 4                                              ; DMC_DDR_t_RP  
  180.   
  181.          ldr     r2, = 8                                              ; DMC_DDR_schedule_RP  
  182.   
  183.          orr     r1, r1, r2  
  184.   
  185.          str     r1, [r0, #INDEX_DMC_T_RP]  
  186.   
  187.    
  188.   
  189.          ; T_RRD Active Bank x to Active Bank y delay(clock cycles)  
  190.   
  191.          ldr     r1, = 3                                              ; DMC_DDR_t_RRD  
  192.   
  193.          str     r1, [r0, #INDEX_DMC_T_RRD]  
  194.   
  195.    
  196.   
  197.          ; T_WR Write to precharge delay(clock cycles)  
  198.   
  199.          ldr     r1, =3                                               ; DMC_DDR_t_WR  
  200.   
  201.          str     r1, [r0, #INDEX_DMC_T_WR]  
  202.   
  203.    
  204.   
  205.          ; T_WTR Write to Read delay(clock cycles)  
  206.   
  207.          ldr     r1, = 2                                            ;DMC_DDR_t_WTR  
  208.   
  209.          str     r1, [r0, #INDEX_DMC_T_WTR]  
  210.   
  211.    
  212.   
  213.          ; T_XP Exit Power down(clock cycles)  
  214.   
  215.          ldr     r1, = 2                                              ; DMC_DDR_t_XP  
  216.   
  217.          str     r1, [r0, #INDEX_DMC_T_XP]  
  218.   
  219.    
  220.   
  221.          ; T_XSR Exit self refresh(clock cycles)  
  222.   
  223.          ldr     r1, = 17                                            ; DMC_DDR_t_XSR  
  224.   
  225.          str     r1, [r0, #INDEX_DMC_T_XSR]  
  226.   
  227.    
  228.   
  229.          ; T_ESR SelfRefresh(clock cycles)  
  230.   
  231.          ldr     r1, = 17                                            ; DMC_DDR_t_ESR  
  232.   
  233.          str     r1, [r0, #INDEX_DMC_T_ESR]  
  234.   
  235.    
  236.   
  237.          ; Memory Configuration Register  
  238.   
  239.          ldr     r1, = 0x40010012                            ; DMC1_MEM_CFG  
  240.   
  241.          str     r1, [r0, #INDEX_DMC_MEMORY_CFG]  
  242.   
  243.    
  244.   
  245.          ldr     r1, = 0xb41                                      ; DMC1_MEM_CFG2  
  246.   
  247.          str     r1, [r0, #INDEX_DMC_MEMORY_CFG2]  
  248.   
  249.    
  250.   
  251.          ldr     r1, = 0x150f8                                   ; DMC1_CHIP0_CFG  
  252.   
  253.          str     r1, [r0, #INDEX_DMC_CHIP_0_CFG]  
  254.   
  255.    
  256.   
  257.          ldr     r1, = 0                                              ; DMC_DDR_32_CFG  
  258.   
  259.          str     r1, [r0, #INDEX_DMC_USER_CONFIG]  
  260.   
  261.    
  262.   
  263.          ; The follows is according to the Datasheet initialization sequence  
  264.   
  265.          ;DMC0 DDR Chip 0 configuration direct command reg  
  266.   
  267.          ldr     r1, = 0x0c0000                                ; DMC_NOP0  
  268.   
  269.          str     r1, [r0, #INDEX_DMC_DIRECT_CMD]  
  270.   
  271.    
  272.   
  273.          ;Precharge All  
  274.   
  275.          ldr     r1, = 0                                              ; DMC_PA0  
  276.   
  277.          str     r1, [r0, #INDEX_DMC_DIRECT_CMD]  
  278.   
  279.    
  280.   
  281.          ;Auto Refresh      2 time  
  282.   
  283.          ldr     r1, = 0x40000                                  ; DMC_AR0  
  284.   
  285.          str     r1, [r0, #INDEX_DMC_DIRECT_CMD]  
  286.   
  287.          str     r1, [r0, #INDEX_DMC_DIRECT_CMD]  
  288.   
  289.    
  290.   
  291.          ;MRS  
  292.   
  293.          ldr     r1, = 0xa0000                                  ; DMC_mDDR_EMR0  
  294.   
  295.          str     r1, [r0, #INDEX_DMC_DIRECT_CMD]  
  296.   
  297.    
  298.   
  299.          ;Mode Reg  
  300.   
  301.          ldr     r1, = 0x80032                                  ; DMC_mDDR_MR0  
  302.   
  303.          str     r1, [r0, #INDEX_DMC_DIRECT_CMD]  
  304.   
  305.    
  306.   
  307.          ;Enable DMC1  
  308.   
  309.          mov  r1, #0x0  
  310.   
  311.          str     r1, [r0, #INDEX_DMC_MEMC_CMD]  
  312.   
  313.    
  314.   
  315. check_dmc1_ready  
  316.   
  317.          ldr     r1, [r0, #INDEX_DMC_MEMC_STATUS]  
  318.   
  319.          mov  r2, #0x3  
  320.   
  321.          and   r1, r1, r2  
  322.   
  323.          cmp  r1, #0x1  
  324.   
  325.          bne   check_dmc1_ready  
  326.   
  327.          nop  
  328.   
  329.          mov  pc, lr  
  330.   
  331.            
  332.   
  333.          END  

++++++++++++++++++++++++++++++++++++++++++

本文系本站原創,歡迎轉載! 轉載請註明出處:

http://blog.csdn.net/mr_raptor/article/details/6621741

++++++++++++++++++++++++++++++++++++++++++




發佈了70 篇原創文章 · 獲贊 12 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章