FIRMWARE-HACKING-GUIDE.txt :

/*************************************************************************
	CDCLink̊Tv
 *************************************************************************

-CDCLink t@[EFA FM3 USB zCOM|[g foCXɂ܂B

-CDCLink t@[EFA̗pr

  - cdctool.exe gpāAFM3 CPŨ[ǂݏA|[gǂݏ
    tAZuȂǂo܂B(ȈՃj^[)

  - cdcbootFM3.exe gpāAFM3 CPUɃ[U[vO
    s邱Ƃo܂Biu[g[_[j
    
    CDCLinkt@[EFÂԒnςăRpC邱ƂŁAg
    AvP[VƂĎgp邱Ƃo܂B

    pӂĂ郆[U[֐(user_cmd())ɊȈՂȃeXgvOāA
    cdctool.exe烆[U[R}h( ARM> user ) ɂĎs邱Ƃ
    ȒPȃ|[gANZX̂悤ȃeXg{邱Ƃł܂B
    
    ܂ACDCLinkt@[EFÁAFlash ROM̔Cӂ̊JnԒnɂ
    [U[vOu[g@\ ( ARM> boot address )Ă܂B
    
    
  - OpenOCD oR FM3 JTAGNP[uƂĎgp邱ƂŁA
    ʂARM̃fobOsȂƂł܂B(JTAGfobO)




/*************************************************************************
	ARM J̓
 *************************************************************************

J́AARMp̃NXgccgp܂B

-ARMn̏ꍇ́ACodeSourcery G++ Lite 4.4.x 𐄏܂B(Windows/Linux)
-Version4.4.xт܂AV̂ł{Iɂ͂njłB
-IC̓ɊւẮAReadMe.txt QlɂĂB

rhɂ ʂGNU-Makegp܂BMinGŴ̂gp邩A
́AWinAVRȂǂɕt̂̂gpĂB



/*************************************************************************
	ȈՃj^[@\ɂ
 *************************************************************************
ȈՃj^[ cdctool.exe ƂWindows̃R}hCvO
DOSN邱ƂŎgpł܂B

Command List
 d  <ADDRESS1> <ADDRESS2>    Dump Memory(RAM)
 e  <ADDRESS1> <DATA>        Edit Memory
 f  <ADDRESS1> <ADDRESS2> <DATA> Fill Memory
 l  <ADDRESS1> <ADDRESS2>    List (Disassemble) PGMEM
 p ?                         Print PortName-List
 p *                         Print All Port (dump format)
 p <PortName>                Print PortAddress and data
 p <PortName> <DATA>         Write Data to PortName
 sleep <n>                   sleep <n> mSec
 label <LABEL>               set loop label.
 :<LABEL>                    set loop label.
 loop  <LABEL> <CNT>         loop execution <CNT> times.
 bench <CNT>                 HID Write Speed Test
 boot [<address>]            Start user program
 run  <address>              Run user program at <address>
 user <arg>                  Run user defined function (usercmd.c)
 poll <portName> [<CNT>]     continuous polling port
 graph <portName>            Graphic display
 q                           Quit to DOS
ARM>

ÃR}hXNvgt@CieLXgt@CjɂāA
cdctool̋NɎw肷ƁAR}hs܂B
    D:> cdctool.exe -iscript.txt



/*************************************************************************
	u[g[_[@\ɂ
 *************************************************************************

FM3pCDCLinkt@[EFÁAu[g[_[̋@\Ă܂B

 0000_0000 +--------------------------+
           |  CDCLinkt@[EFA   |  16kB
 0000_4000 +--------------------------+
           |  [U[AvP[V| 1MB-16kB
           |                          |
           |                          |
           |                          |
           |                          |
 0001_0000 +--------------------------+


 cdcbootFM3.exe gpāAUSBoRŃ[U[AvP[V
 s邱Ƃo܂B
    D:> cdcbootFM3.exe -r fm3-4000.hex


 ܂APORT P39GNDڒnڑĂāAA4000ԒnɃ[U[AvP[V
 ݍς݂ł΁Aʓdセ̂܂܃[U[AvP[VN܂B
 
 ̋@\ fm3/src/vector.c Őł܂B
   #define	USER_BOOT_FUNCTION	Yes
   #define	USER_BOOT_JUMPER	P39			// Wp[̎w.
   #define	USER_BOOT_VECTOR	0x4000		// [U[vO̎w.



/*************************************************************************
	u[g[_[̎st@Cɂ
 *************************************************************************
 FM3ł cdctool/MakefileɂāA -DFM3Lɂărh܂B
 āAoオst@Ccdcboot.execdcbootFM3.exeƂ̂
 uĎgpĂB
 
 STM32}CRŎgpꍇ-DFM3`ɃrhĂB
 
 ́AFM3łFLASH݂̃y[W}bsOȂ̂ŏRpC
 őΉĂ邽߂łB




/*************************************************************************
	u[gV[PXɂ
 *************************************************************************

 crt0.c  main() ֐Ăяo܂B
 main()֐I疳[vŒ~܂B

 4000 ԒnJñAvP[VƂăRpCꍇ4000Ԓn擪
 OxN^zu܂B
 ̏ꍇAu[g[_[4000ԒñvOu[gs钼O
 OxN^[̃P[g(0x4000)n[hEFAɑ΂Đݒ肵܂B

 src\vector.c
	SCB->VTOR = USER_BOOT_VECTOR;	// 0x4000



/*************************************************************************
	stdio.h ( printf ) ̎gpɂ
 *************************************************************************
 user_cmd() ֐ printfȂǂ̊֐gpƃt@[EFATCY
 16kB𒴂܂B
 ̏ꍇ16kB̃u[g[_[( 0 ` 0x3fff Ԓn)̃TCY𒴂Ă
 ܂̂ŁA0ԒnX^[g̃t@[EFAƂĂ͎gpȂ悤ɂĂB




/*************************************************************************
	stdio.h ( printf ) ̏o͐ɂ
 *************************************************************************
 printf()֐̏o͌ʂ́Aȉ̌oHʂ cdctool.exeDOSR\[
 ֕\܂B
 
   stdlib (printf֐) --> syscalls.c (write֐) --> usercmd.c (_user_putc֐)
 
 ӓ_ƂāA"\0" 邢16i0x00 _user_putc()֐ɓn܂ 
 WindowszXgAuser_cmd()IƔ肵ăR}h҂ɖ߂܂̂ŁA
 Av 0x00 𒼐 printf Ȃ悤ɂ肢܂B




/*************************************************************************
	CDCfoCXUSBJX^foCXւ̕ύX@
 *************************************************************************

src/usbfunc_demoapp_descriptor.h: USB-CDC fXNv^
   #define	IS_CUSTOM_CLASS	(0)	// for TEST
Pɂ܂B

src/usbfunc_demoapp_config.h	: 
   #define USB_VENDOR_ID    
   #define USB_PRODUCT_ID   
K؂IDɏ܂B

ɂGh|Cg̎dlςꍇ͂ɍ킹ăfXNv^
Gh|Cg̃nh܂B

CDCfoCXŗL̃nhsvł΍폜܂B

USBJX^foCXɂꍇ́AWIȉzCOMƂĈɁAlibUSB
WinUSBCugpăfoCX@悤ɂȂ܂B


/*************************************************************************
	\[Xt@Cꗗ:
 *************************************************************************

src/main.c				: C[`
src/mcu.h				: foCXˑwb_[
src/callback.c			: USB]R[obNJ
src/callback.h			: 
src/crt0.c              : b^CCűN@X^[gAbv
src/crt0.h              : 
src/debug.c             : fobOwp[
src/debug.h             : 
src/monitor/board.c     : ԑ҂Ȃ
src/monitor/fifo.c      : ėpFIFO
src/monitor/fifo.h      : 
src/monitor/gpio.c      : GPIO digitalWriteȂ
src/monitor/gpio.h      : 
src/monitor/gpiodef.h   : 
src/monitor/hidcmd.h    : monitorR}hԍ蓖
src/monitor/monit.c     : monitorC
src/monitor/monit.h     : 
src/monitor/picwrt.c    : AVR/PIC/JTAG
src/monitor/picwrt.h    : 
src/monitor/pindef.h	 		: JTAGps蓖ĕ\
src/monitor/usbio.c             : USB-CDCo̓[eBeB
src/monitor/usbio.h             : 
src/monitor/usercmd.c           : [U[R}hieXgpj
src/monitor/usi_pic18s.h        : AVRpݏ
src/monitor/utype.h             : ̌^`
src/usbfunc_demoapp.c           : USB nhÕC
src/usbfunc_demoapp_config.h	: 
src/usbfunc_demoapp_descriptor.h: USB-CDC fXNv^


: FM3 commonCu

common/core_cm3.c		:
common/core_cm3.h		:
common/mb9bf506r.h		:
common/system_mb9bf50x.c		:
common/system_mb9bf50x.h		:
common/system_mb9bf50x_usbfunc.c:

: FM3 USBhCo[

drivers/usbf/MB9B500.h
drivers/usbf/common.h
drivers/usbf/cpu_config.h
drivers/usbf/cpu_define.h
drivers/usbf/cpu_define_MB9B500.h
drivers/usbf/cpu_map_MB9B500.h
drivers/usbf/dbg_print.c
drivers/usbf/dbg_print.h
drivers/usbf/hw_support.h
drivers/usbf/hw_support_type0.c
drivers/usbf/joystick.c
drivers/usbf/joystick.h
drivers/usbf/joystick_config.h
drivers/usbf/led.c
drivers/usbf/led.h
drivers/usbf/led_config.h
drivers/usbf/mon.h
drivers/usbf/timer.c
drivers/usbf/timer.h
drivers/usbf/timer_config.h
drivers/usbf/typedef.h
drivers/usbf/usbf.h
drivers/usbf/usbf_api.c
drivers/usbf/usbf_api.h
drivers/usbf/usbf_cdc.h
drivers/usbf/usbf_cdc_api.c
drivers/usbf/usbf_cdc_api.h
drivers/usbf/usbf_config.h
drivers/usbf/usbf_core_control_transfer.c
drivers/usbf/usbf_core_control_transfer.h
drivers/usbf/usbf_core_data_transfer.c
drivers/usbf/usbf_core_data_transfer.h
drivers/usbf/usbf_core_descriptor_analyze.c
drivers/usbf/usbf_core_descriptor_analyze.h
drivers/usbf/usbf_core_event.c
drivers/usbf/usbf_core_event.h
drivers/usbf/usbf_core_stdrequest.c
drivers/usbf/usbf_core_stdrequest.h
drivers/usbf/usbf_hal_int.c
drivers/usbf/usbf_hal_int.h
drivers/usbf/usbf_hal_io.c
drivers/usbf/usbf_hal_io.h
drivers/usbf/usbf_msc.h
drivers/usbf/usbf_msc_api.c
drivers/usbf/usbf_msc_api.h
drivers/usbf/usbf_msc_bot.c
drivers/usbf/usbf_msc_bot.h
drivers/usbf/usbf_msc_config.h
drivers/usbf/usbf_msc_descriptor.h
drivers/usbf/usbf_msc_scsi.c
drivers/usbf/usbf_msc_scsi.h
drivers/usbf/usbf_spec.h
drivers/usbf/vector.c


/*************************************************************************
	̗v_:
 *************************************************************************

  ECode Sourcery G++ Lite (GNU make) Ńrhʂ悤ɂȂĂ܂B
  EJ́AWindows/Linux̗ɑΉĂ܂B

  Erh@ src/ fBNgɂāA make łnjłB


USB܂ޑS̏̃ĆAȉ̃\[Ẍȉ̊֐.
src/usbfunc_demoapp.c : void usbfunc_demoapp_main(void);


j^[̃C[v́Aȉ̃\[Ẍȉ̊֐.
src/callback.c			: void USB_loop(void);

#define	ECHOBACK_TEST	 1ɂƁAUSB-CDCGR[obÑeXgt@[
쐬ł܂B

src/monitor/usercmd.c           : [U[R}hieXgpj
void user_cmd(int arg) 邱ƂŃfoCX̊ȒPȃeXgsł܂B
s@ cdctool.exe N
ARM> user
     ~~~~
Ɠ͂܂B
ȈՓIprintgpł܂B



src/monitor/monit.c     : monitorC
̃t@[EFÁAUSB-CDCfoCXłA60oCgŒ蒷̃pPbgzXgob
ƂƂ肷邱ƂɂĊȈՓIȃ[_v|[gzXgob̃R}h
Cc[(cdctool.exe)ŎŝłB


src/monitor/picwrt.c    : AVR/PIC/JTAG
monitorR}hJTAĜ߂̒ǉR}hpӂ邱ƂŁAJTAGNA_v^[
Ă܂B

̓Iɂ́Aȉ̊֐ŎĂ܂B
void jtag_command(int read_flag)   TMS/TDI/TCK̐ATDO̓ǂݎ@\.
void jtag_control(int read_flag)   AIAnTRST,nSRSTs̐.


src/monitor/gpio.c      : GPIO digitalWriteȂ
Arduino̊֐  pinMode / digitalRead / digitalWrite Ă܂B
pinԍ͊{IɒʔԂɂȂĂ܂B (gpio.h)

--------------------------------------------------------------------------------
src/crt0.c              : b^CCűN@X^[gAbv

b̃X^[gAbvW[͑AZuŏĂgcc̈ڐA
ȂƂ̂łA͂bŏĂ݂܂B asm( ... ) fBNeBu
gĂ܂B
̃X^[gAbv͍Œ̂Ƃ܂( .data ̃Rs[ .bss ̃NÂ)

`bv֌W̏main()֐̍ŏɋLqĂ.
xN^[e[u̕тCPU[J[ɂĈقȂ܂B

--------------------------------------------------------------------------------
[EOF]
