ライチは、Linuxから実行するように、溶接からゼロを送信します

ステップ

(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

 

再電源投入後、それはシリアル出力を見ることがありません

おすすめ

転載: www.cnblogs.com/ziyouchutuwenwu/p/11515978.html