; -------------------------------------------------------------------------------- ; @Title: Serial FLASH Programming script for T2080 ; @Description: ; ; FLASH type: Serial FLASH(Micron,N25Q128A) connected to SPI controller ; Serial FLASH CS is connected to CS0 ; ; S(D)RAM: 0x10001000 ; ; SPITF : iobase.address()+0x110010 ; iobase.address()==0x40000000 ; SPIRF : iobase.address()+0x110014 ; SPMODE : iobase.address()+0x110000 ; ; @Keywords: SPI Micron N25Q128 ; @Author: JIM ; @Chip: T2080 ; @Copyright: (C) 1989-2015 Lauterbach GmbH, licensed for use with TRACE32(R) only ; -------------------------------------------------------------------------------- ; $Id: t2080-spi.cmm 6991 2019-05-20 08:03:38Z jjeong $ LOCAL &arg1 ENTRY &arg1 &arg1=STRing.UPpeR("&arg1") // for example "PREPAREONLY" &spi_chipselect=0. SYStem.RESet SYStem.BdmClock 15.MHz ;try lower debug frequencies if problems occur, typically 15MHz are possible with just one core assigned SYStem.CPU T2080 SYStem.DETECT.CPU CORE.ASSIGN 1. SYStem.Option.FREEZE off ;To set a specific Reset Configuration Word (RCW) call this script with SETRCW IF "&PAR1"=="SETRCW" ( DIALOG.YESNO "Debugging a Freescale T2080-QDS board?" ENTRY &PAR1 IF &PAR1 DO "~~/demo/powerpc64bit/hardware/qoriq_t2/t2080qds/demo_set_rcw.cmm" ELSE DO "~~/demo/powerpc64bit/hardware/qoriq_t2/t2080rdb/demo_set_rcw.cmm" ) ELSE SYStem.Up ;Set CCSRBAR to 0x40000000 Data.Set ANC:IOBASE.ADDRESS()+0x00004 %Long 0x40000000 Data.Set ANC:IOBASE.ADDRESS()+0x00008 %Long 0x80000000 ;commit Data.Set ANC:IOBASE.ADDRESS()+0x00008 %Long 0x00000000 ;Set up local access window, 0xC0000000--0xFFFFFFFF Data.Set ANC:IOBASE.ADDRESS()+0x00C00 %Long %BE 0x00000000 Data.Set ANC:IOBASE.ADDRESS()+0x00C04 %Long %BE 0xC0000000 Data.Set ANC:IOBASE.ADDRESS()+0x00C08 %Long %BE 0x81F0001D ;Set up local access window, 0x10000000--0x1007FFFF, memory complex 1 (for CPC) Data.Set ANC:IOBASE.ADDRESS()+0x00C10 %Long %BE 0x00000000 Data.Set ANC:IOBASE.ADDRESS()+0x00C14 %Long %BE 0x10000000 Data.Set ANC:IOBASE.ADDRESS()+0x00C18 %Long %BE 0x81000012 ;Set up local access window, 0x10080000--0x100FFFFF, memory complex 2 (for CPC) Data.Set ANC:IOBASE.ADDRESS()+0x00C20 %Long %BE 0x00000000 Data.Set ANC:IOBASE.ADDRESS()+0x00C24 %Long %BE 0x10080000 Data.Set ANC:IOBASE.ADDRESS()+0x00C28 %Long %BE 0x81100012 ;Enable CoreNet Platform Cache (CPC) as SRAM ;Block 1, memory complex 1 Data.Set ANC:IOBASE.ADDRESS()+0x10000 %Long %BE 0x80200000 Data.Set ANC:IOBASE.ADDRESS()+0x10100 %Long %BE 0x00000000 Data.Set ANC:IOBASE.ADDRESS()+0x10104 %Long %BE 0x10000009 ;Set maximum (512kB) and enable, start at 0x10000000 ;Block 2, memory complex 2 Data.Set ANC:IOBASE.ADDRESS()+0x11000 %Long %BE 0x80200000 Data.Set ANC:IOBASE.ADDRESS()+0x11100 %Long %BE 0x00000000 Data.Set ANC:IOBASE.ADDRESS()+0x11104 %Long %BE 0x10080009 ;Set maximum (512kB) and enable, start at 0x10080000 ;TLB entry for CCSRBAR 0x40000000--0x7fffffff (caching inhibited - memory access guarded) MMU.TLB1.Set 0. 0xC0000A00 0x4000000A 0x40000015 0x00000000 0x0 ;TLB entry for CPC-SRAM 0x10000000--0x100FFFFF MMU.TLB1.Set 1. 0x80000500 0x10000002 0x10000015 0x00000000 0x0 ;Initialize L2SRAM Data.Set 0x10000000--0x1000FFFF %Quad 0xAA55AA55AA55AA55 ;Configure SPI controller Data.Set ANC:IOBASE.ADDRESS()+0x110020+(&spi_chipselect*0x04) %Long %BE 0x24171108 flash.create 1. 0xf8000000--0xffffffff 0x20000 M29EW WORD flash.erase 0xff800000--0xffffffff flash.program all flash.program off GOSUB READ_ID_TEST ;Flashfile setup FLASHFILE.RESet ; FLASHFILE.CONFIG FLASHFILE.CONFIG ANC:IOBASE.ADDRESS()+0x110010 ANC:IOBASE.ADDRESS()+0x110014 ANC:IOBASE.ADDRESS()+0x110000 &spi_chipselect ; FLASHFILE.TARGET FLASHFILE.TARGET 0x10001000++0x1FFF 0x10003000++0x1FFF ~~/demo/powerpc/flash/byte/spi64fs_ppcpq.bin /KEEP ;Read FLASH Manufacturer and Device ID FLASHFILE.GETID //End of the test prepareonly IF "&arg1"=="PREPAREONLY" ENDDO FLASHFILE.DUMP 0x0 ; Read ;FLASHFILE.ERASE 0x0--0xFFFFF ; Erase ;FLASHFILE.LOAD * 0x0 ; Write ;FLASHFILE.LOAD * 0x0 /ComPare ; verify ENDDO READ_ID_TEST: SCREEN.OFF // FLASH_CS_LOW; // SET_SPCOMREG(4); // WRITE_BYTE(SPIFLASH_READ_ID); // READ_BYTE(menufactureID); // READ_BYTE(deviceID); // FLASH_CS_HIGH; &BASE=(IOBASE.ADDRESS()+0x110000) &data=Data.Long(&BASE)|(0x1<<31.) Data.Set &BASE %Long &data &data=0x4|(&spi_chipselect<<30.) ; read total 4+1 bytes Data.Set &BASE+0xC %Long &data Data.Set &BASE+0x4 %Long Data.Long(&BASE+0x4)|0x400 Data.Set &BASE+0x10 %Byte 0x9F PRINT "read: 0x" Data.Byte(&BASE+0x14) Data.Set &BASE+0x10 %Byte 0x00 PRINT "read: 0x" Data.Byte(&BASE+0x14) " (Manufacture ID)" Data.Set &BASE+0x10 %Byte 0x00 PRINT "read: 0x" Data.Byte(&BASE+0x14) " (Device ID)" Data.Set &BASE+0x10 %Byte 0x00 PRINT "read: 0x" Data.Byte(&BASE+0x14) Data.Set &BASE+0x10 %Byte 0x00 PRINT "read: 0x" Data.Byte(&BASE+0x14) &data=Data.Long(&BASE)&~(0x1<<31.) Data.Set &BASE %Long &data SCREEN.ON ENDDO