From 73f226cc66a49e295638f30a62501b90f1621267 Mon Sep 17 00:00:00 2001 From: kaqu Date: Fri, 23 Oct 2020 19:09:05 +0200 Subject: [PATCH] Flash to upper region finally working! --- .gitignore | 1 + .vscode/launch.json | 4 +- .../__pycache__/bit_to_flash.cpython-38.pyc | Bin 4233 -> 0 bytes .../__pycache__/load_to_flash.cpython-38.pyc | Bin 925 -> 0 bytes .../prepare_firmware.cpython-38.pyc | Bin 1635 -> 0 bytes helpers/eraser.svf | 89 ++++++++++++++++++ ...{bit_to_uploadflash.py => imageflasher.py} | 29 +++--- helpers/load_to_flash.py | 21 ++++- neopixelar.py | 10 +- software/flashcreate.sh | 78 ++------------- software/ramcreate.sh | 3 + 11 files changed, 138 insertions(+), 97 deletions(-) delete mode 100644 helpers/__pycache__/bit_to_flash.cpython-38.pyc delete mode 100644 helpers/__pycache__/load_to_flash.cpython-38.pyc delete mode 100644 helpers/__pycache__/prepare_firmware.cpython-38.pyc create mode 100644 helpers/eraser.svf rename helpers/{bit_to_uploadflash.py => imageflasher.py} (85%) diff --git a/.gitignore b/.gitignore index 00a8d09..c31981f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ build/* __pycache__/* backup/* software/build/* +hd_errors/* \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 1f53046..29387e5 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -10,8 +10,8 @@ "request": "launch", "program": "${file}", "args": ["--build", - //"--load", // May be used separately ... - "--flash", // May be used separately ... + "--load", // May be used separately ... + //"--flash", // May be used separately ... "--revision=7.0", "--uart-name=crossover", //"--with-ethernet", // Not to be used together w/ etherbone! Won't TFTP ... diff --git a/helpers/__pycache__/bit_to_flash.cpython-38.pyc b/helpers/__pycache__/bit_to_flash.cpython-38.pyc deleted file mode 100644 index 95ca227ca983da5f1bd568e459db2e7cab1f42c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4233 zcmb_f&2QVt6`!FfiJ~R>qt4f6lbyEft<_yi@@Je6IO|w4;wEuYOTlJ|EL2)Ek`?RA zBojLdg&v$eF4isf76g!w`3HLFanC&$1&{5?_W}jlL;K#4@<)VqVDLFS_IJ>5!fBlt{+k+9juk_Z?~oDV3J*OehRTO| zgh!uKBP=3Z+f=MQK^{eWnjpQ{KG~-a6+<@$!~l=M+(WJ#@utcLjJSyN_!(j(M3N^& z;sxPJ*$%!8?@~%cSS0w+83OI#8M3QT(566ABL|=vSuIn11y=~(Dm+W@*mKZu+NBQR z$}Y{3uRiW7F5w|pIZLh+u6_;==n;1*S6yX++$CMQ1tZ`cUbT?zfrd>K8yu#n7q-l1 zRir{5-SOyCkJerhD+W{lG%}5*lQE~W+1VMBPfS}b8H|&Ocbf0u1 zj)ES|2d9tg6O_UFUP4wIEy8}+_QLLwfRdHA`;U*AApd?}K#a_}G><#gcdJqkObaI!D63%)_H@Q#u75>wG<%EVm>&rr) zxiHrqbO-mS{pUSp>-WI#=dbI>KbBGzKIUt6p72i)JvsX1VQGIpo)P%ji0i+Q$|FXW3?^_#i1SQcI@@>TRlMSqlE&A~Xgc5m^1 zA%9heA<$R)L&+w#lDiF4EVv*isTHuZ^BcVY-_FO1xfRC7^V!r@y#TzXrvgegxKf8p zi@Ce-<+Cf<`3K!2>Yc^HEjGR!T)?F-$@~;BIU!_nDG)L{nGK{&_ZR-3-iOkq7C)9L zsHcN(@=Zrr?4H%CT4tkBYgSpK#l;CzmgWLe`T%ATz_t6U#eAVCA&*V5;?k|yWICJ8 zPh_W9A-@!Gw@mvavuyr#W|K$EU?1MjGs%oirGeMv5vw&}a)w^MUpS%NbRX#d>diO3 z?E4exH{bz1BqBRC=iPuzAt3K%|BWy2Ef%D{Y@XrngUy5X%RTRJ)_@P2mS!LFMf(AO z<5)^h74EGZdZ^EHdJ%c%*4X5nFJx|hS;G9kh(Q4>xcQgv!gOo?E)Ry1cS>hb`Y;EZhVa_gP=AuwUhK`6afDKXbOi z*~9`X)H;GS9@`FE7a)Fe&KCseFlieb_uaUB`6w)50u=_U<#lYLAF%!!P!b*N8+Ko zRuf7t=SIybwxsu#A2i>Xre+ZPAXYK%ess$7 z7X)>|@z_ZXduppKnw|<}3irb6PaR=fh>91g13BEbYE8!r*-vdx6_Ct5)fQsY(>RnM zPOTxlP_wmdeIys)ms)Us;GX)ZRcm^hBX*o^%WQipwy6;#3RMyAa3glO*^NPY1Sz%6 zswmlzw7jUvxg~7d7=mKQ7NvEFhD|wTsIb1`DeJbO*LWHJucdN>8xg;6;X%rXK@M~z zHzQ;}saO+891K{(ai`X93vLW-h@DbE^ulG_k%qQzmHb`|XJz-bAn{JUHDGZ&+7)OB z9F;U>2#!soa1RA-glcf>aFo&&RY^iG8B_id(Ia8yUkW^th&rSEDKZCZVMUx?q$4y- zal0?V)bZ0uV{nR2V% zvg)oI35g>0s&7(b9l4#%M=R1Bz+sqmGKyRLH_` zk|nZCzo|h_Y1vi^iIdoTh7BGV4;5{i4N)q2YTI-+ys+J_!)A(9g;U<<9tFAsRkRm{ z|D*gs!&(!USmVe9kG{tmnNhWCP+dK)iv=9nA3}o=!>wvj{kKE{snLj{Lhm&F5AGG- Ae*gdg diff --git a/helpers/__pycache__/load_to_flash.cpython-38.pyc b/helpers/__pycache__/load_to_flash.cpython-38.pyc deleted file mode 100644 index 5db2804c382a8b7ad4fd5d9fb4c60c10c5011730..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 925 zcmZWo&2H2%5Vo_)CQZAjNR@iEdg~#{mfij%1cD>#1#wxBA~&Awru8O~?RK|OIh9x7 zgerB9JPmhWIq?cyV6v?M!ALWnAA9EW=j3g#7ZQ}OpLF`TL&&!__*+~Io}=m#jUa+b zG9tneosVQh!4dAcqt1Ywb?#gsciw_5=zC|>9r@r34{JxFI|@oy_@e*<5p0st3WQ<> zRz4FE-ga&%B|u?CtZtH}ABweh74!|+?tRCZ zG@x>x0lU;v7Ug-!1+Oueo=+OK)9;50G?+B2%Dfn}vMM1wGaNmb8D2BU>Rr}4QK2N1 z?0`iuuOTxaqC&9#e7J+s9}dFi#lvtGKdi)fI;UNjsId2}ES2hq-+$PWkmFdQC0f+)`rhfeZ(%##wTx|oCHDw%++ zLFq(RT%@K-bIJ82uCHv^W}Ym=_Pf)M&=4BXkh;|Q>G}axJ~KQMUqvrQnDCNOuEa{{oT`K%ni)Ag8xg+>T4XEEXT6uQH)&0_dy)TP538n zyjS>u@%F0n5yfvPC7(i?TDRtAVm)2U!r1N@Og0miV&3pVT3_L%+YLcWXnREA4|PxK llG%H+w!GfcX(cWsJPR<=8)yP2=mm5GspvW`+I6}{e*yQ%|8D>Q diff --git a/helpers/__pycache__/prepare_firmware.cpython-38.pyc b/helpers/__pycache__/prepare_firmware.cpython-38.pyc deleted file mode 100644 index 94ae4b9165ac4f1474de516474a909627e3830cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1635 zcma)6PjA~c6esoHPMii=hG6K0*kOndw$jAyT3{%)wFA~mP+%Jd2tx&0q#ZeuD3J6V zYwjt#_O=h;90%;9>=Wp^(>}rm4A`S=r(PEfqaZ#$^8Frvq<&A|bUJMW?aky({6~P$ zZ^qef4mh8}t6o9J5W^XYRu)IN@vX>aR^%|7IX|MvWiIo;dfaFJr6nVdCc(1B(XxGm zZt!j z0_$ir!Aom_7WNVBAWyW-?4`4?Ztyk6sCWv#^VZky(t}t)t`QbSTXT5fKo&D+GuPn3 zdhej|8Vxy2BtyX6Kd+qrkX}};zL4oSEofHV|C}b5(~{6ka?0j}U!_Vba{R-|>uyC} zN?uZ#7GpA8g*EeJluD&Zzu&J;S8zqrqE}`#;p8Kt1<6E0Gg3-1;fW?C)fa#%Qgy*u zzk2XYlyj4FvkvL<8I^pstHEn3$9xThZMuGK2~|5LQSGH_lxDnkOCY9eZzN<+!K#a? zPP5ugAp2?8jXEa!bdx)3HJr>`w7)sM$y3mrM|-Q|-TL?b>7V|Lq>}nBd0^?5Dwtk$NSbEK7=R0dsyzmd}0>2o2i9Hg}=Z+ zBaJ84($>zzop?9cXcA_8W_^HkaD*7BkvZ2kDCqx0x_3r;cjWZ%jD#KkwR_7%vNou5 zr}~wA+1!m$fVqfUfvn`D#8iU7U~$X~E~yrhXvuk-K>JLoY0ec%rc&}^EuG_+-#+ge zz>pIKdVGeh2hvw&bzHf6Vm*dq!B{x15+dL+RakUuWDO~qz+=x zT*l+L_IdGrDn(KI5-uJ}qfz-*x6>q9i}FKo)G>6(v+x0^(fZ4A|7#@QGjQ0>oHLFi ze|>+I9YRfaRy^T{j-WUVy*{v$d*I6h(;0o=rZA_7 Size must be 0x16) +!SDR 32 TDI (000000F9) +! TDO (68FFFFFF) +! MASK (FF000000); + +// CMD 0x06 Write Enable + 0x01 Write 0x00 to Status Register +SDR 8 TDI(60); +SDR 16 TDI(0080); +RUNTEST 1.00E-0 SEC; + + +// **CMD 0x06 Write Enable + 0xc7 Chip Erase** +SDR 8 TDI (60); +SDR 8 TDI (e3); +// Warten bis Fertig ... vieleicht reichen 3 Minuten +RUNTEST 180.00 SEC; + + +// BYPASS +SIR 8 TDI (FF); + +//REFRESH +SIR 8 TDI(79); +SDR 24 TDI(000000); + +STATE IDLE; +RUNTEST 32 TCK; +RUNTEST 2.00E-2 SEC; +STATE RESET; + + diff --git a/helpers/bit_to_uploadflash.py b/helpers/imageflasher.py similarity index 85% rename from helpers/bit_to_uploadflash.py rename to helpers/imageflasher.py index 6e0cc2a..a6d76d3 100755 --- a/helpers/bit_to_uploadflash.py +++ b/helpers/imageflasher.py @@ -1,10 +1,11 @@ #!/usr/bin/env python3 # -# bit_to_uploadflash.py -# Very basic bitstream to SVF converter, tested with the ULX3S WiFi interface -# -# Modified a little to be used as integral module ... +# imageflasher.py +# +# History: +# -------- +# 23.10.20/KQ Working version ... # import os @@ -21,7 +22,7 @@ def bitreverse(x): y |= (1 << i) return y -def convertBitToUploadFlashFile(bitFile, FlashFile, flash_page_size = 256, address = 0, erase_block_size = 64*1024): +def convertBitToUploadFlashFile(bitFile, FlashFile, flash_page_size = 256, address = 0, erase_block_size = 64*1024, id_provided = 0): with open(bitFile, 'rb') as bitf: bs = bitf.read() # Autodetect IDCODE from bitstream @@ -34,10 +35,14 @@ def convertBitToUploadFlashFile(bitFile, FlashFile, flash_page_size = 256, addre idcode |= bs[i+6] << 8 idcode |= bs[i+7] break + if id_provided != 0: + print("ID provided externally!") + idcode = id_provided if idcode is None: print("Failed to find IDCODE in bitstream, check bitstream is valid") sys.exit(1) print("IDCODE in bitstream is 0x%08x" % idcode) + bitf.seek(0) last_page = -1 @@ -170,12 +175,8 @@ if __name__ == "__main__": relpath = "../" else: relpath = "./" - #filename = os.getcwd() + relpath + "/software/build/main" - filename = relpath + "build/colorlight_5a_75b/gateware/colorlight_5a_75b" - os.chdir(relpath + "build/colorlight_5a_75b/gateware") - os.system(f"ecppack colorlight_5a_75b.config --svf colorlight_5a_75b.svf --bit colorlight_5a_75b.bit --bootaddr 0xC0100000") - os.chdir(pwd) - print(f"Translating {filename}.bit to {filename}.svf.flash") - convertBitToUploadFlashFile(filename + ".bit", filename + ".svf.flash", address=0x100000) - print(f"Load/flash {filename}.svf.flash ...") - load2flash(filename + ".svf.flash") + filename = relpath + "software/build/main" # Fixed main.img! + print(f"Translating {filename}.img to {filename}.svf") + convertBitToUploadFlashFile(filename + ".img", filename + ".svf", address=0x100000, id_provided= 0x41111043) + print(f"Load/flash {filename}.svf ...") + load2flash(filename + ".svf") diff --git a/helpers/load_to_flash.py b/helpers/load_to_flash.py index 29de22c..7035686 100644 --- a/helpers/load_to_flash.py +++ b/helpers/load_to_flash.py @@ -20,13 +20,24 @@ jtag newtap ecp5 tap -irlen 8 -expected-id 0x41111043 f.close() os.system(f"openocd -f prog/openocd.cfg -c \"transport select jtag; init; svf {file}; exit\"") +def eraseflash(file): + load2flash(file) + if __name__ == "__main__": - _, tail = os.path.split(os.getcwd()) + bLoadProgram = False # False = Erase instead! + pwd = os.getcwd() + _, tail = os.path.split(pwd) if tail == "helpers": # Started within subdir? relpath = ".." else: relpath = "." - filename = relpath + "/build/colorlight_5a_75b/gateware/colorlight_5a_75b" - print(f"Load/flash {filename}.svf.flash ...") - load2flash(filename + ".svf.flash") - print("Done.") + if bLoadProgram == True: + filename = relpath + "/build/colorlight_5a_75b/gateware/colorlight_5a_75b" + print(f"Load/flash {filename}.svf.flash ...") + load2flash(filename + ".svf.flash") + print("Done.") + else: + filename = relpath + "/helpers/eraser.svf" + print("Erasing flash w/ {0}(expect 5 min. waiting time ...)".format(filename)) + eraseflash(filename) + print("Done.") diff --git a/neopixelar.py b/neopixelar.py index 7f8553b..c465eef 100755 --- a/neopixelar.py +++ b/neopixelar.py @@ -388,14 +388,16 @@ def main(): **soc_core_argdict(args)) # 32MBit SPIFlash (not used currently) --------------------------------------------------------------- - soc.mem_map["spiflash"] = 0xc0000000 # Length: 0x01000000 ('til 0xc1000000 - 1) + flashbase = 0xc0000000 + flashoffset = 0x100000 # Used to be zero (default) + soc.mem_map["spiflash"] = flashbase # Length: 0x01000000 ('til 0xc1000000 - 1) # Boot at +1MB soc.add_constant("FLASH_BOOT_ADDRESS", soc.mem_map["spiflash"] + 1024*1024) # 0xc0100000 soc.add_spi_flash(name="spiflash", mode="1x", dummy_cycles=8, clk_freq=5e6) builder = Builder(soc, **builder_argdict(args)) - # Now override boot address - args.ecppack_bootaddr = 0xC0100000 + # Now override boot address (used to be zero/default) + args.ecppack_bootaddr = flashbase + flashoffset # 0xC0100000 builder.build(**trellis_argdict(args), run=args.build) # Written here to (local) build tree if args.doc: @@ -412,7 +414,7 @@ def main(): name = os.path.join(builder.gateware_dir, soc.build_name) print(f"Executing ./bit_to_flash.py {name}.bit {name}.svf.flash") from helpers.bit_to_flash import convertBitToFlashFile - convertBitToFlashFile(name + ".bit", name + ".svf.flash") + convertBitToFlashFile(name + ".bit", name + ".svf.flash", address=flashoffset) from helpers.load_to_flash import load2flash load2flash(name + ".svf.flash") return diff --git a/software/flashcreate.sh b/software/flashcreate.sh index 52dc658..d2f8d2c 100755 --- a/software/flashcreate.sh +++ b/software/flashcreate.sh @@ -5,77 +5,11 @@ # # History: # -------- -# 21.10.20/KQ Initial (running) version +# 21.10.20/KQ Initial version +# 23.10.20/KQ Worx great now! # -# Test for missing ('zero length') basefilenames -if [ -z $1 ] || [ -z $2 ]; then - echo "usage: ./flashcreate.sh " - exit -fi - -# Adjust these paths according to your local installation !!! -MY_LOCAL_LITEX_PATH=$HOME"/fpga/litex" -MY_LOCAL_FOMU_PATH=$HOME"/Fomu" - -# If you don't use a virtual environment, comment out next line ... -source $HOME/fpga/bin/activate - -# Make sure, we use the right compiler version ... -export PATH=$PATH:$MY_LOCAL_LITEX_PATH/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14/bin/ - -TRIPLE="riscv64-unknown-elf" -CPU="vexriscv" -CPUFLAGS="-march=rv32i -mabi=ilp32 -D__vexriscv__" -CPUENDIANNESS="little" -CPU_DIRECTORY="$MY_LOCAL_LITEX_PATH/litex/litex/soc/cores/cpu/vexriscv" -COMPILER_RT_DIRECTORY="$MY_LOCAL_LITEX_PATH/pythondata-software-compiler_rt/pythondata_software_compiler_rt/data" -SOC_DIRECTORY="$MY_LOCAL_LITEX_PATH/litex/litex/soc" -#export BUILDINC_DIRECTORY -BUILDINC_DIRECTORY="/mnt/a30054ad-3fe6-444a-8d93-16df937e448e/projects/fpga/neopixelar/build/colorlight_5a_75b/software/include" -LIBCOMPILER_RT_DIRECTORY="$MY_LOCAL_LITEX_PATH/litex/litex/soc/software/libcompiler_rt" -LIBBASE_DIRECTORY="$MY_LOCAL_LITEX_PATH/litex/litex/soc/software/libbase" -LIBLITEDRAM_DIRECTORY="$MY_LOCAL_LITEX_PATH/litex/litex/soc/software/liblitedram" -LIBLITEETH_DIRECTORY="$MY_LOCAL_LITEX_PATH/litex/litex/soc/software/libliteeth" -LIBLITESPI_DIRECTORY="$MY_LOCAL_LITEX_PATH/litex/litex/soc/software/liblitespi" -LIBLITESDCARD_DIRECTORY="$MY_LOCAL_LITEX_PATH/litex/litex/soc/software/liblitesdcard" -BIOS_DIRECTORY="$MY_LOCAL_LITEX_PATH/litex/litex/soc/software/bios" - -BIOSPATH="/mnt/a30054ad-3fe6-444a-8d93-16df937e448e/projects/fpga/neopixelar/build/colorlight_5a_75b/software/bios" -OBJECTS="$BIOSPATH/isr.o $BIOSPATH/boot-helper.o $BIOSPATH/boot.o $BIOSPATH/helpers.o $BIOSPATH/cmd_bios.o $BIOSPATH/cmd_mem.o $BIOSPATH/cmd_boot.o $BIOSPATH/cmd_i2c.o $BIOSPATH/cmd_spiflash.o $BIOSPATH/cmd_litedram.o $BIOSPATH/cmd_liteeth.o $BIOSPATH/cmd_litesdcard.o $BIOSPATH/complete.o $BIOSPATH/readline.o" - -LXP="../build/colorlight_5a_75b/software" -CRT0="$LXP/libbase/crt0.o" -LXR="-L$LXP/libcompiler_rt -L$LXP/libbase -L$LXP/liblitedram -L$LXP/libliteeth -L$LXP/liblitespi -L$LXP/liblitesdcard -llitedram -lliteeth -llitespi -llitesdcard -lbase-nofloat -lcompiler_rt" - -INCLUDES="-I$SOC_DIRECTORY/software/include/base -I$SOC_DIRECTORY/software/include -I$SOC_DIRECTORY/software -I$BUILDINC_DIRECTORY -I$CPU_DIRECTORY -I$BIOS_DIRECTORY" -# -Os optimize for size -#COMMONFLAGS="-Os $CPUFLAGS -g3 -fomit-frame-pointer -Wall -fno-builtin -nostdinc $INCLUDES" -COMMONFLAGS="-O0 $CPUFLAGS -g3 -fomit-frame-pointer -Wall -fno-builtin -nostdinc $INCLUDES" -CFLAGS="-fexceptions -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes" -LDFLAGS="-nostdlib -nodefaultlibs -L$BUILDINC_DIRECTORY" -echo "--" -echo "calling gcc with: -c $COMMONFLAGS $CFLAGS -Wa,-fPIC for $1 & $2" -#$MY_LOCAL_LITEX_PATH/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14/bin/riscv64-unknown-elf-gcc -O0 -S -nostdinc $COMMONFLAGS $INCLUDES -Wa,-fPIC source/$1.c -$MY_LOCAL_LITEX_PATH/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14/bin/riscv64-unknown-elf-gcc -c $COMMONFLAGS $CFLAGS -Wa,-fPIC source/$2.c -o build/$2.o -$MY_LOCAL_LITEX_PATH/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14/bin/riscv64-unknown-elf-gcc -c $COMMONFLAGS $CFLAGS -Wa,-fPIC source/$1.c -o build/$1.o -echo "--" -echo "calling ld for flash with: $LDFLAGS $OBJECTS build/$2.o build/$1.o -o build/$1.bin" -$MY_LOCAL_LITEX_PATH/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14/bin/riscv64-unknown-elf-ld $LDFLAGS -T linker/flash.ld -N $CRT0 $OBJECTS $LXR build/$2.o build/$1.o -o build/$1.elf -echo "--" -echo "creating raw binary from elf-file" -$MY_LOCAL_LITEX_PATH/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14/riscv64-unknown-elf/bin/objcopy -O binary -S --image-base 0xc0100000 build/$1.elf build/$1.bin -#echo "--" -#echo "creating disassembly dump build/$1.dis" -#$MY_LOCAL_LITEX_PATH/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14/bin/riscv64-unknown-elf-objdump -D -b binary build/$1.bin -m riscv >build/$1.dis -ecppack colorlight_5a_75b.config --svf colorlight_5a_75b.svf --bit colorlight_5a_75b.bit --bootaddr 0xc0100000 -#echo "--" -#echo "loading build/$1.bin to flash boot adress via wishbone-tool" -#$MY_LOCAL_FOMU_PATH/fomu-toolchain-linux_x86_64-v1.5.6/bin/wishbone-tool --ethernet-host 192.168.1.20 --server load-file --csr-csv ../build/csr.csv --load-address 0xc0100000 --load-name build/$1.bin -#echo "--" -#echo "Connecting to remote terminal w/ wishbone-tool (press ESC to terminate ...)" -#$MY_LOCAL_FOMU_PATH/fomu-toolchain-linux_x86_64-v1.5.6/bin/wishbone-tool --ethernet-host 192.168.1.20 --server terminal --csr-csv ../build/csr.csv -# alternatively use: -# screen /dev/ttyUSB0 115200 -# Press 'Ctrl-A k' to terminate ... -echo "Done (don't worry about the download 'error' in red!)." +echo "Flashing image ..." +cd .. +python3 helpers/imageflasher.py +cd software \ No newline at end of file diff --git a/software/ramcreate.sh b/software/ramcreate.sh index 2f2d347..fe28a57 100755 --- a/software/ramcreate.sh +++ b/software/ramcreate.sh @@ -76,6 +76,9 @@ fi #echo "creating disassembly dump build/$1.dis" #$MY_LOCAL_LITEX_PATH/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14/bin/riscv64-unknown-elf-objdump -D -b binary build/$1.bin -m riscv >build/$1.dis echo "--" +echo "Creating flashable image" +python3 -m litex.soc.software.mkmscimg build/$1.bin --little --fbi --output build/$1.img +echo "--" echo "loading build/$1.bin to RAM base via wishbone-tool" if [ "$3" = "1" ]; then echo "for bank #1"