ステップ
(16M、ソース・プログラミング・ツールを変更する必要以上あれば)のフラッシュチップを溶接
、はんだピンシリアルデータを参照するために、
背面に1番ピン、フラッシュチップの開発ボードの位置を注意することは、フラッシュチップを溶接、ピン番号1は、側面の位置は、マイクロフォンの近くに位置しています
以下では、リファレンス関連のコンパイルの段階で接続そのダウンロード元、SPIフラッシュモードの選択に注意してください、
uboot
SPI-V3Sクローン-bのGit-実験HTTPS:// github.com/Lichee-Pi/u-boot.git ARCH作る = = CROSS_COMPILE ARM ARM-Linuxの-gnueabihf- menuconfigの アーキテクチャSELECT 、ARM用から選択 デバイスドライバ SPIサポートフラッシュ フックを選挙マクロニクスSPIフラッシュサポートメーカー独自のフラッシュ、の名前を選択 しますが、16メガバイトのフラッシュよりもより多くのを使用している場合は、チェックフラッシュバンクはサポートオプションを必要とし、それ以外の場合は、唯一の16メガバイトを読むことができます
コードには、前にXXXを追加し、/のconfigs / sun8i.hが含まれます
#define CONFIG_BOOTCOMMAND "SFプローブ0;" \ " ; SFは0x41800000 0X100000 0x10000番地を読み出し" \ " SFは0x41000000 0x110000 0x400000読み取る; " \ " bootz 0x41000000 - 0x41800000 " の#define CONFIG_BOOTARGS "コンソール= ttyS0,115200 earlyprintkパニック= 5 rootwait" \ " mtdparts = spi32766.0:1M(uboot)RO、64K(DTB)RO、4M(カーネル)RO、 - (rootfsの)ルート= 31:03 RW rootfstype = JFFS2 "
コンパイル
時間はARCH =アームCROSS_COMPILE =アームのlinux-gnueabihf-作る2 >&1 | ティーbuild.log
Linuxカーネルのソースをダウンロードしてください
ARCH =アームCROSS_COMPILE =アームのlinux-gnueabihf-作るlicheepi_zero_defconfig
作るARCH =アームCROSS_COMPILE =アームのlinux-gnueabihf- menuconfigのを
選択
ドライバデバイス <*> メモリデバイス技術(MTD)のサポート <*> パーティション情報のフラッシュubootパスを解析するプロジェクトを解析するコマンドラインでのパーティションテーブル。 <*>、SPI NORデバイスのサポート ファイルシステム <*> その他のファイルシステム <*>ジャーナリングフラッシュファイルシステムV2(JFFS2)のサポート
コードアーチ/腕/ブーツ/ DTS / sun8i-V3S-licheepi-zero.dts
&SPI0 { ステータス = " 大丈夫" 。 mx25l25635e:@ mx25l25635e 0 { 互換 = " JEDEC、SPI-NOR " 。 REG = < 0x0の > 。 SPI -max周波数= < 50000000 > 。 #address β細胞= < 1 > 。 #size β細胞= < 1 > 。 }。 }。
コンパイル
ARCH =アームCROSS_COMPILE =アームのlinux-gnueabihf-を作る- J4 ARCH作る =アームCROSS_COMPILE =アームのlinux-gnueabihf- dtbs 东西在在アーチ /腕/ブーツ/ zImageのを
rootfsのは、直接ファイルシステムを生成する前下車mkfs.jffs2
sudoのmkfs.jffs2 -s 0x100の -e 0x10000番地 -p 0x1AF0000 -d〜/ダウンロード/ rootfsの/ -o ../jffs2.img
パッケージ化されたミラー
DD の場合 = flashimg.bin BS = 1Mの=は/ dev /ゼロ=カウント32 DDを場合 = $ HOMEは/ dev /組込み/ lichee /ゼロ/ SPI_Flash / U-ブート/ U-ブートsunxi-と-spl.binの= flashimg.bin BS = 1K CONV = NOTRUNC DD なら = $ HOME / DEV /埋め込み/ lichee /ゼロ/ SPI_Flash / Linuxベースのゼロ4.13 .Y /アーチ/アーム/ブート/ DTS / sun8i-V3S-licheepi、ゼロ= flashimg.bin BS =のdock.dtbは1K求める= 1024 コンバージョン= NOTRUNCの DD の場合 = $ HOMEは/ dev /組込み/ lichee /ゼロ/ SPI_Flash / linuxの-ゼロ4.13 =の.Y /アーチ/腕/ブーツ/ zImageのflashimg.bin BS = 1Kシーク= 1088 コンバージョン= NOTRUNC DD なら= $ HOME / = flashimg.bin BS = 1Kシーク=のDEV /埋め込み/ lichee /ゼロ/ SPI_Flash / jffs2.img 5184 CONV = NOTRUNC
焼かファームウェア
:gitのクローン-b HTTPS SPI-リベース// github.com/Icenowy/sunxi-tools.gitを
以上16Mの修理書かれた質問
コードFEL-spiflash.c、検索
#define CMD_WRITE_ENABLE 0x06の 和 aw_fel_spiflash_write_helper函数
次のセクションに
#define CMD_WRITE_ENABLE 0x06の部分、改成如下 の#define CMD_WRITE_ENABLE 0x06で の#define SPI_FLASH_16MB_BOUN 0x1000000番地 #CMD_BANKADDR_BRWR定義 0x17のを // 唯一のSpansionフラッシュが使用 CMD_BANKADDR_BRRDを定義#を 0x16 #はCMD_EXTNADDR_WREAR定義 0xC5の #を定義CMD_EXTNADDR_RDEAR 0xC8 size_tのbank_curr = 0 ; 空 aw_fel_spiflash_write_helper(feldev_handle * DEVは、 オフセットのuint32_t、無効 * bufは、size_tのLEN、 size_tのerase_size、uint8_t erase_cmd、 size_tのprogram_size、uint8_t program_cmd) { uint8_t * BUF8 =(uint8_t * )BUF。 size_tのmax_chunk_size = DEV-> soc_info-> scratch_addr - DEV-> soc_info-> spl_addr。 size_tのcmd_idx、bank_sel。 もし(max_chunk_size> 0x1000番地) max_chunk_size = 0x1000番地。 uint8_t * cmdbuf = のmalloc(max_chunk_size)。 cmd_idx = 0 ; prepare_spi_batch_data_transfer(DEV、DEV - > soc_info-> spl_addr)。 //銀行のサポートを追加 { cmd_idx= 0 ; bank_sel =オフセット/ SPI_FLASH_16MB_BOUN。 もし(bank_sel == bank_curr) 後藤bar_end。 / * エミットは、ライトイネーブルコマンド* / cmdbuf [cmd_idx ++] = 0 ; cmdbuf [cmd_idx ++] = 1 。 【cmd_idx cmdbuf ++] = CMD_WRITE_ENABLE。 / * エミット書き込み銀行* / cmdbuf [cmd_idx ++] = 0 ; cmdbuf [cmd_idx ++] = 2 ; 【cmd_idx cmdbuf CMD_EXTNADDR_WREAR。++] = cmdbuf [cmd_idx ++] =オフセット>> 24 。 / * エミット完了を待つ* / cmdbuf [cmd_idx ++] = 0xFFで。 cmdbuf [cmd_idx ++] = 0xFFで。 / * 放ちエンドマーカー* / cmdbuf [cmd_idx ++] = 0 ; cmdbuf [cmd_idx ++] = 0 ; aw_fel_write(DEV、cmdbuf、DEV - > soc_info-> spl_addr、cmd_idx)。 aw_fel_remotefunc_execute(DEV、NULL); bar_end: bank_curr = bank_sel。 } cmd_idx = 0 ; 一方、(LEN> 0 ){ 一方(LEN> 0 && max_chunk_size - cmd_idx> program_size + 64 ){ 場合(%のerase_sizeオフセット== 0 ){ / * エミットは、ライトイネーブルコマンド* / cmdbuf [cmd_idx ++] = 0 ; cmdbuf [cmd_idx ++] = 1 。 【cmd_idx cmdbuf ++] = CMD_WRITE_ENABLE。 / * 放ち消去コマンド* / cmdbuf [cmd_idx++] = 0 ; cmdbuf [cmd_idx ++] = 4 。 【cmd_idx cmdbuf ++] = erase_cmd。 cmdbuf [cmd_idx ++] =オフセット>> 16 。 【cmd_idx cmdbuf ++] =オフセット>> 8 。 【cmd_idx cmdbuf ++] = オフセット。 / * エミット完了を待つ* / cmdbuf [cmd_idx ++] = 0xFFで。 cmdbuf [cmd_idx ++] = 0xFFで。 } / *ライトイネーブル発するコマンド* / cmdbuf [cmd_idx ++] = 0 ; cmdbuf [cmd_idx ++] = 1 。 【cmd_idx cmdbuf ++] = CMD_WRITE_ENABLE。 / * エミットページプログラムコマンド* / size_tのwrite_count = program_size。 もし(write_count> LEN) write_count = LEN。 cmdbuf [cmd_idx ++] =(4 + write_count)>> 8 。 cmdbuf [cmd_idx ++] = 4+ write_count; cmdbuf [cmd_idx ++] = program_cmd。 cmdbuf [cmd_idx ++] =オフセット>> 16 。 【cmd_idx cmdbuf ++] =オフセット>> 8 。 【cmd_idx cmdbuf ++] = オフセット。 memcpy(cmdbuf + cmd_idx、BUF8、write_count)。 cmd_idx + = write_count。 BUF8 + = write_count。 LEN - = write_count。 オフセット + = write_countを。 / *完了を放ち待ち * / cmdbuf [cmd_idx ++] = 0xFFで。 cmdbuf [cmd_idx ++] = 0xFFで。 } / * 放ちエンドマーカー* / cmdbuf [cmd_idx ++] = 0 ; cmdbuf [cmd_idx ++] = 0 ; / * フラッシュ* / aw_fel_write(DEV、cmdbuf、DEV - > soc_info-> spl_addr、cmd_idx)。 aw_fel_remotefunc_execute(DEV、NULL); cmd_idx = 0 ; } フリー(cmdbuf)。 }
作ります
燃やします
テストフラッシュデバイスディスカバリかどうか sunxi - FELバージョン sunxi -Fel SpiFlash -p-書く0〜は/ dev /組み込み/ Lichee / ZERO / SPI_Flash / flashimg.bin
再電源投入後、それはシリアル出力を見ることがありません