ARM9 시리즈 이지만.. FP 연산이 불가능한 녀석이 바로 Xscale

그래서 꽤나 더 느리게 느껴진거였나..


아무튼 XScale에서는 eCos에서 사용하는 부트로더인 redboot를 기본으로 채택하고 있어서

redboot + linux 조합이었던 것.


eCos는 RTOS

PXA255에는 CF와 USB Client가 내장



The XScale architecture is based on the ARMv5TE ISA without the floating point instructions.

RedBoot — open-source bootloader, the standard boot firmware shipped with XScale boards

[링크 : https://en.wikipedia.org/wiki/XScale]


RedBoot (an acronym for Red Hat Embedded Debug and Bootstrap firmware) is an open source application that uses the eCos real-time operating system Hardware Abstraction Layer to provide bootstrap firmware for embedded systems. 

[링크 : https://en.wikipedia.org/wiki/RedBoot]


The Embedded Configurable Operating System (eCos) is a free and open source real-time operating system intended for embedded systems and applications which need only one process with multiple threads.

[링크 : https://en.wikipedia.org/wiki/ECos]

Posted by 구차니




설마 했는데.. 으앙 ㅠㅠ 다시 winXP로 돌아가야 하나.. ㅠㅠ
[링크 : http://forum.hjtag.com/viewthread.php?tid=1615]


Posted by 구차니
패러럴 포트가 ECP 인데 혹시나 해서 Bi-directional로 해줘도
CCCR 로 클럭 올려줘도 안된다 -_-


H-JTAG의 TCK는 1/MAX 라서 최대 클럭이라 더 올릴수도 없고..
25KB/s를 대충 계산해보니 204800bps
115200bps의 시리얼 보다 두배 조금 못되는 속도라고 해야하나..


패러럴 포트는 2MB/s 로 전송이 가능하다는데
[링크 : http://en.wikipedia.org/wiki/Parallel_port]



아무리 구형이라고 해도 속도가 25KB/s 에서 절~대 올라가지 않는건
그냥 포기하고 느리게 부트로더만 올리는 정도로 써야 하려나?
혹은.. USB JTAG(비싸!!!)을 구매하던가? ㅠㅠ 
Posted by 구차니
저번에 JTAG으로 데이터가 느리게 나온게 혹시
클럭 문제일까 생각해서 기본적으로 잡히는 클럭이 얼마인가 찾아 봤는데
400Mhz 라고 해도 기본 내장 PLL로 클럭을 돌린다던가 하는 문제(?)가 있는 듯.

The CCCR, shown in Table 3-20, controls the core clock frequency, from which the core, memory 
controller, LCD controller, and DMA controller frequencies are derived. The crystal frequency to 
memory frequency multiplier (L), memory frequency to run mode frequency multiplier (M), and 
run mode frequency to turbo mode frequency multiplier (N) are set in this register. The clock 
frequencies are shown below. 

Memory frequency = 3.6864 MHz crystal freq. * crystal frequency to memory frequency multiplier (L)
Run mode frequency = Memory frequency * memory frequency to run mode frequency multiplier (M)
Turbo mode frequency = run mode frequency * run mode frequency to turbo mode frequency multiplier (N)
The value for L is chosen based on external memory or LCD requirements and can be constant 
while M and N change to allow run and turbo mode frequency changes without disrupting memory 
settings. The value for M is chosen based on bus bandwidth requirements and minimum core 
performance requirements. The value for N is chosen based on peak core performance  requirements. 

메모리 클럭은 3.6864 MHz * 27 = 99.5328 MHz
CPU 클럭은 메모리 클럭의 x 1 = 99.5328 MHz
CPU 터보클럭은 CPU 클럭의 x 1 = 99.5328 MHz

음.. 그렇다고 해도 100 MHz 에서 고작 25KB/s 로 JTAG 작동하는건 좀.. 너무 이상한데 -ㅁ-?


CKEN은 어떻게 보면 PM(Power Management) 역활을 한다.
필요없는 장치에 CLK를 인가하지 않음으로 소비 전력을 줄일수 있다고 한다.


Posted by 구차니
단 두개를 넣었을 뿐인데 허무하게 성공 ㅋㅋㅋ
아놔 ㅋㅋㅋㅋ

결론 : 메뉴얼은 잘 읽어 봅시다

이전과 차이점은 Init Scripts에 추가되었다는 것
하나는 SDRAM을 살리고 다른 하나는 FLASH / SRAM 등을 설정하는 명령어 이다.


우오오!!! Check를 눌렀는데 Flash가 이제 뜬다!!


근데.. 속도가 왜케 조루야... 25KB/s 32MB 짜리 다 받으려다가 날 새겠다
INIT CLK라던가 PGM CLK를 바꾸어도 차이가 없는것 봐서는 다른 문제인 것 같은데
패러럴 포트 특성상.... 이려나?



귀차니즘으로 palmpalm 용으로 하나 뚝딱!


Posted by 구차니
PXA255 메뉴얼을 보다가
Static Memory가 나와서 SRAM인가 했는데...
FLASH 메모리를 Static Memory라고 한다는 사실에 멘붕 ㅋㅋㅋ


일단 MSC0 / MSC1 / MSC2 중에 RT0/1/2/3/4/5 는 메모리 타입을 정의하는데

ROM type

000 - Nonburst ROM or Flash Memory

001 - SRAM 

010 - Burst-of-four ROM or Flash (with non-burst writes)

011 - Burst-of-eight ROM or Flash (with non-burst writes)

100 - Variable Latency I/O (VLIO)

RT0 - 0 - Flash Memory
RT1 - 1 - SRAM  << MT48LC8M16 근데 이녀석.. SDRAM 인데? 약파나?

RT2 - 4 - Variable Latency I/O (VLIO)
RT3 - 0 - Flash Memory
RT4 - 0 - Flash Memory
RT5 - 0 - Flash Memory

RT3와 RT5는 설정자체가 없으니 안한다고 하고
음.. 플래시가 그럼 2개 영역, SRAM이 1개 영역...?


Posted by 구차니
문서상에 두개의 레지스터 값이 있으니 한번 시도는 해봐야겠다 ㅋ


MDCNFG 0000 0000 0000 0000 0000 1001 1010 1001
  DLATCH0 - 1 - Return Data from SDRAM latching scheme for pair 0/1 > 1 – Latch return data with return clock
  DTC0 - 01 - Timing Category for SDRAM pair 0/1 > 00 - tRP=2clks, CL=2, tRCD=1clks, tRAS(min)=3clks, tRC=4clks
  DNB0 - 1 - Number of banks in lower partition pair > 0 – 2 internal SDRAM banks
  DRAC0 - 01 - SDRAM row address bit count for partition pair 0/1 > 01 – 12 row address bits
  DCAC0 - 01 - Number of Column Address bits for partition pair 0/1 > 01 - 9 column address bits
  DWID0 - 0 - SDRAM data bus width for partition pair 0/1 > 0 – 32 bits 

  DE0 - 1 - SDRAM enable for partition 0 > 1 – SDRAM partition enabled

MDREFR 0000 0000 0000 1111 1111 0000 0010 0111
  APD - 1 - SDRAM/Synchronous Static Memory Auto-Power-Down Enable.
  K2DB2 - 1 - SDRAM Clock Pin 2 (SDCLK2) Divide by 2 Control/Status
                   1 – SDCLK2 runs at one-half the MEMCLK frequency

  K2RUN - 1 - SDRAM Clock Pin 2 (SDCLK<2>) Run Control/Status
                   1 – SDCLK2 enabled
  K1DB2 - 1 - SDRAM Clock Pin 1 (SDCLK1) Divide by 2 Control/Status
                    1 – SDCLK1 runs at one-half the MEMCLK frequency
  K1RUN - 1 - SDRAM Clock Pin 1 (SDCLK<1>) Run Control/Status
                    1 – SDCLK1 enabled
  E1PIN - 1 - SDRAM Clock Enable Pin 1 (SDCKE1) Level Control/Status
                    1 – SDCKE1 is enabled
  K0DB2 - 1 - Synchronous Static Memory Clock Pin 0 (SDCLK<0>) Divide by 2 Control/Status
                    1 – SDCLK0 runs at one-half the memory clock frequency
  K0RUN - 1 - Synchronous Static Memory Clock Run Pin 0 (SDCLK<0>) Control/Status

                    1 – SDCLK0 is enabled
  E0PIN - 1 - Synchronous Static Memory Clock Enable Pin 0 (SDCKE<0>) Level Control/Status
                    1 – SDCKE0 is enabled
  DRI - 0000 0010 0111 - SDRAM refresh interval, all partitions.
                    DRI = (Number of memclk cycles-31) / 32 = (Refresh time / rows) x Memory clock frequency / 32.


'하드웨어 > PalmPalm Tynux Box' 카테고리의 다른 글

H-JTAG으로 tynuxbox 읽기 성공  (2) 2013.07.28
Tynuxbox FLASH 초기화 관련 내용  (0) 2013.07.27
PXA255 init script 고찰  (0) 2013.07.11
palmpalm + h-jtag이 안된이유?  (0) 2013.07.07
palmpalm FS 구조  (0) 2013.07.07
Posted by 구차니
H-JTAG에서 init script는
단순하게 프로그램을 올리기 직전에 올려지는 테스트 코드가 아닌
해당 프로세서를 초기화 하는 코드로 생각이 된다.

아무튼.. SDRAM IF를 사용하도록 초기화 코드를 찾아야 하는데
레지스터 기반이라.. 하아.. memory map부터 좀 찾아 봐야겠다 ㅠㅠ

[INIT_TRITON_RAM]
memory write 0x48000008 0x12DC24D8          ; MSC0 = 0x26F226F2
memory read 0x48000008                      ; read MSC0
memory write 0x4800000C 0x7FF07FF0          ; MSC1 = 0x3FF4A441
wait  10
memory write 0x48000010 0x7FF07FF0          ; MSC2 = 0x00007FF0
wait  10
memory write 0x48000004 0x00000018          ; MDREFR = 0x00000018
memory write 0x4800001C 0x00000000          ; SXCNFG = 0x00000000
memory write 0x48000004 0x00010018          ; MDREFR = 0x00010018
wait  10
memory write 0x48000004 0x0009C030          ; MDREFR = 0x000BC018
memory write 0x48000000 0x00000AA8          ; MDCNFG = 0x00000AA8
wait  100
memory write 0x48000000 0x00000AAD          ; MDCNFG = 0x00000AA9
memory write 0x48000040 0x00220032          ; MDMRS = 0x00220032
 
[링크 : http://download.ronetix.info/peedi/cfg_examples/xscale/pxa255.cfg] << init code(makefile?) 


[링크 : http://www.fairwayacademy.org/.../latest-on-openocd-and-pxa255-sdram-initscript/]

# pxa255.scr - openOCD script to initialize system and local SDRAM to greatly
# aid performance whilst flashing and dumping meomory.
#-----------------------------------------------------
# setup GPIO
#
#mww 0x40E00018 0x00008000 ;CPSR0
#mww 0x40E0001C 0x003FAB82 ;GPSR1
#mww 0x40E00020 0x0001C000 ;GPSR2
#mww 0x40E00024 0x000B2150 ;GPCR0
#mww 0x40E00028 0xFCC00050 ;GPCR1
#mww 0x40E0002C 0x00003FFF ;GPCR2
#mww 0x40E0000C 0xC38BA150 ;GPDR0
#mww 0x40E00010 0xFCFFABD2 ;GPDR1
#mww 0x40E00014 0x0001FFFF ;GPDR2
#mww 0x40E00054 0x80011004 ;GAFR0_L
#mww 0x40E00058 0xA51A800A ;GAFR0_H
#mww 0x40E0005C 0x69908018 ;GAFR1_L
#mww 0x40E00060 0xAAA5AAAA ;GAFR1_H
#mww 0x40E00064 0xAAAAAAAA ;GAFR2_L
#mww 0x40E00068 0x00000002 ;GAFR2_H
#mww 0x40F00004 0x00000030 ;PSSR# setup memory controller
# Local tweaks here for Falcon II board
# This board uses 2 13x9 sdrams for a 32 bit wide data bus#msc1
mww 0x4800000C 0x3FC43FCC
#msc0
mww 0x48000008 0x3FC423F2
#msc1
mww 0x4800000C 0x3FC43FCC
#msc2
mww 0x48000010 0x3FC43FC4
#mecr
mww 0x48000014 0x00000000
#mcmem0
mww 0x48000028 0x00010504
#mcmem1
mww 0x4800002C 0x00010504
#mcatt0
mww 0x48000030 0x00010504
#mcatt1
mww 0x48000034 0x00010504
#mcio0
mww 0x48000038 0x00004715
#mcio1
mww 0x4800003C 0x00004715

#mdref
mww 0x48000004 0x03CA4018
#mdref
mww 0x48000004 0x004B4018
#mdref
mww 0x48000004 0x000B4018
#mdref
mww 0x48000004 0x000BC018
#mdcnfg
mww 0x48000000 0x00001AC8
#DELAY 20 maybe put dummy mdw commands here???
mdw 0x00000000 20
#wakeup the sdram:
mww 0xA0000000 0xA0000000
mww 0xA0000000 0xA0000000
mww 0xA0000000 0xA0000000
mww 0xA0000000 0xA0000000
mww 0xA0000000 0xA0000000
mww 0xA0000000 0xA0000000
mww 0xA0000000 0xA0000000
mww 0xA0000000 0xA0000000
#mdcnfg
mww 0x48000000 0x00001AC9
#mdmrs
mww 0x48000040 0x00000000 

[링크 : http://www.fairwayacademy.org/.../enabling-working-area-in-sdram-for-openocd-on-pxa255/]  << init code


위에 cfg 파일의 레지스터로 찾아보니 오호오오오오옹~ 이걸 이용해 봐야겠다 
0x4800_0000 MDCNFG SDRAM Configuration Register 0
0x4800_0004 MDREFR SDRAM Refresh Control Register


[링크 : http://www.idt.mdh.se/kurser/cdt214/PXA255_Developers_Manual.pdf]

'하드웨어 > PalmPalm Tynux Box' 카테고리의 다른 글

Tynuxbox FLASH 초기화 관련 내용  (0) 2013.07.27
Tynuxbox SDRAM 초기화 관련 내용  (0) 2013.07.27
palmpalm + h-jtag이 안된이유?  (0) 2013.07.07
palmpalm FS 구조  (0) 2013.07.07
palmpalm = PXA255 + Intel 28F128J3  (0) 2013.07.03
Posted by 구차니
init script에 내용이 비어있었는데
그러면.. JTAG에서 reset을 걸었을때 SDRAM interface가 disable 되기 때문인듯?
결론은.. init script를 무슨수가 있어도 찾던가 만들던가... 인가?


'하드웨어 > PalmPalm Tynux Box' 카테고리의 다른 글

Tynuxbox SDRAM 초기화 관련 내용  (0) 2013.07.27
PXA255 init script 고찰  (0) 2013.07.11
palmpalm FS 구조  (0) 2013.07.07
palmpalm = PXA255 + Intel 28F128J3  (0) 2013.07.03
tynuxbox X와 H-JTAG (wiggler / parallel)  (0) 2013.07.02
Posted by 구차니
32MB 빆에 안되기에
커널과 FS를 4MB정도에 쑤셔넣고
램디스크로 커널을 압축해제 한 뒤 사용하는듯..

$ mount
/dev/ram0 on / type ext2 (rw)
/proc on /proc type proc (rw)
none on /dev/pts type devpts (rw)
/dev/mtdblock3 on /usr/Tynux type jffs2 (rw) 

$ df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/ram0                 5.8M      5.0M    817.0k  86% /
/dev/mtdblock3           28.0M      9.3M     18.7M  33% /usr/Tynux 

'하드웨어 > PalmPalm Tynux Box' 카테고리의 다른 글

PXA255 init script 고찰  (0) 2013.07.11
palmpalm + h-jtag이 안된이유?  (0) 2013.07.07
palmpalm = PXA255 + Intel 28F128J3  (0) 2013.07.03
tynuxbox X와 H-JTAG (wiggler / parallel)  (0) 2013.07.02
tynux 커널소스 역추적  (0) 2012.07.29
Posted by 구차니