一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Linux NOR開發(fā)指南

嵌入式Linux那些事 ? 來源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2023-03-06 09:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Linux NOR 開發(fā)指南

1 簡介

編寫目的

此文檔描述Sunxi NOR 模塊的使用方法,為相關(guān)人員調(diào)試提供指導

適用范圍

boot0: 適用于brandy-2.0

u-boot: 適用于u-boot-2018

kernel: 適用于linux-4.9/linux-5.4 內(nèi)核

BSP 的開發(fā)人員、測試人員

2 模塊介紹

2.1 模塊功能介紹

Linux 中SPINOR 體系結(jié)構(gòu)如下圖所示:

poYBAGQFR_SAdEauAABZARRWkR0112.png

SPI NOR Framework:這層主要是處理不同廠家的NOR 物理特色差異,初始化SPINOR的工作狀態(tài),如工作線寬(1 線、2 線、4 線、8 線)、有效地址位(16M 以上的NOR 需要使用4 地址模式),為上層MTD 提供讀寫擦接口

對應代碼目錄:drivers/mtd/spi-nor/spi-nor.c

M25P80(generic SPI NOR controller driver):這層主要對SPI NOR Framework

層傳下來的數(shù)據(jù)封裝成msg,傳遞給SPI framework 層。

對應代碼目錄:drivers/mtd/devices/m25p80.c

SPI Framework:這層主要是將msg 加入ctl 的工作隊列中,啟動內(nèi)核線程隊列,處理隊列

中的msg。

對應代碼目錄:drivers/spi/spi.c

SPI controller driver:這層初始化SPI 控制器頻率、時鐘模式、cs 有效電平、大小端等

配置,同時處理上層傳下來的msg,通過CPU/DMA 方式傳輸數(shù)據(jù)到FIFO,再傳輸給外設

SPINOR。

對應代碼目錄:drivers/spi/spi-sunxi.c

2.2 相關(guān)術(shù)語介紹

術(shù)語 解釋說明
Sunxi 指Allwinner 的一系列SOC 硬件平臺
SPI Serial Peripheral Interface,同步串行外設接口
NOR Flash NOR Flash 是一種非易失閃存技術(shù),是Intel 在1988 年創(chuàng)建
MTD MTD(memory technology device 內(nèi)存技術(shù)設備) 是用于訪問memory 設備(ROM、flash)的Linux 的子系統(tǒng)

2.3 模塊配置介紹

2.3.1 longan 的配置和打包

./build.sh config

All available platform:

0. android

1. linux

Choice [linux]: 1

... //配置根據(jù)需求選擇

All available flash: //flash類型,只區(qū)分nor和非nor方案,Android方案無此選項,默認非nor

0. default

1. nor

Choice [default]: 1

打包普通固件

#./build.sh clean

#./build.sh

#./build.sh pack

打包卡打印固件

#./build.sh clean

#./build.sh

#./build.sh pack_debug

在配置的過程中會把平臺目錄下的BoardConfig.mk 的信息拷貝到.buildconfig 中。

2.3.2 sys_config 配置

SPINOR 的boot0 啟動階段,部分參數(shù)是從boot0 頭部獲取的,而這些參數(shù)是我們在打包固件時,通過工具update_boot0 將sys_config.fex 中[spinor_para],更新到boot0 頭部的,sys_config.fex 的[spinor_para] 配置參數(shù)如下:

[spinor_para]

;readcmd =0x6b

;read_mode =4

;write_mode =4

;flash_size =16

;delay_cycle =1

;frequency =100000000

;erase_size =64

;lock_flag =0

;sample_delay =0

;sample_mode =2

spi_sclk = port:PC00<4><0><2>

spi_cs = port:PC01<4><1><2>

spi0_mosi = port:PC02<4><0><2>

spi0_miso = port:PC03<4><0><2>

spi0_wp = port:PC04<4><0><2>

spi0_hold = port:PC05<4><0><2>

其中:

readcmd:boot0 用于讀取數(shù)據(jù)的命令,不填默認用uboot 傳遞過來的readcmd

read_mode、write_mode:boot0 的工作線寬(1、2、4),不填默認更加readcmd 決

定線寬

flash_size:flash 的大小

delay_cycle:boot0 的采樣延時配置,大于60MHZ 配置為1,小于24MHZ 配置為2,

大于24MHZ 小于60HZ 配置為3

frequency:boot0 的SPI 工作頻率,不填使用默認值50M

erase_size:boot0 的擦除單位

lock_flag:鎖功能是否打開

sample_delay:boot0 的細調(diào)采樣的采樣延時,uboot、kernel 也會用到,默認不填等于

0xaaaaffff

sample_mode:boot0 的細調(diào)采樣的采樣模式,uboot、kernel 也會用到,默認不填等于

0xaaaaffff

spi_sclk、spi_cs、spi0_mosi、spi0_miso、spi0_wp 和spi0_hold 用于配置相應的GPIO。

2.3.3 UBOOT 配置

2.3.3.1 編譯和配置

#make clean

#make sun8iw19p1_nor_config ----啟動的uboot (#make sun8iw19p1_config----燒寫uboot)

#make -j32

2.3.3.2 Menuconfig 配置

#cd brandy/brandy-2.0/u-boot-2018

#make menuconfig

進入Device Drivers

Device Drivers ----> [*]SPI Suppport ----> [*]Sunxi flash support ---->

pYYBAGQFR_SAJPQwAAB6DLrEbws832.png

進入SPI Support

Device Drivers ----> [*]SPI Suppport ----> [*]Sunxi SPI driver

poYBAGQFR_WAKlpmAABDplKsBKw729.png

進入sunxi_flash_support

Device Drivers ----> [*]Sunxi flash support ----> [*]Support sunxi spinor devices

pYYBAGQFR_WAQvAXAAA7eGRi4l8540.png

2.3.4 KERNEL 配置

2.3.4.1 SPINOR-驅(qū)動配置

#cd kernel/liunx-4.9 #make ARCH=arm menuconfig

進入Device Drivers

Device Drivers ----> <*>Memory Technology Device (MTD) support ----> [*]SPI support ---->

pYYBAGQFR_aAfWDgAAB44oKIlMs513.png

進入Menory Technology Device(MTD) support

Device Drivers ----> <*>Memory Technology Device (MTD) support ----> <*>SUNXI partitioning support <*>Direct char device access to MTD devices <*>Caching block device access to MTD devices Self-contained MTD device drivers ----> SPI-NOR device support ---->

poYBAGQFR_eAFSZLAABtAhw5HUg252.png

進入Self-contained MTD device drivers(5.4 內(nèi)核不需要選擇此項)

Device Drivers ----> <*>Memory Technology Device (MTD) support ----> Self-contained MTD device drivers ----> <*>Support most SPI Flash chips (AT16DF, M25P.....)

pYYBAGQFR_eAatGbAABPA6sY148898.png

2.3.4.2 cmdline 方式選擇

Boot opttions ---->

poYBAGQFR_iABJycAABUBYHZkCY778.png

進入Boot options

Boot opttions ----> Kernel command line type ---->

pYYBAGQFR_iAP7BFAABtT_HFxww019.png

進入kernel command line type

Boot opttions ----> Kernel command line type ----> (X)Use bootloade kernel arguments if available

poYBAGQFR_mARJpGAAAx85ssslE355.png

2.3.4.3 文件系統(tǒng)配置

進入File systems

File system ----> [*]Miscellaneous filesystems ---->

pYYBAGQFR_mAPBxLAABBVqHNBKg634.png

? 進入Miscellaneous filesystems ? Incluede support for ZLIB compressed file systems (NEW) ? Incluede support for LZ4 compressed file systems (NEW) ? Incluede support for LZO compressed file systems (NEW) ? Incluede support for XZ compressed file systems (NEW)

File system ----> [*]Miscellaneous filesystems ----> [*]Incluede support for XZ compressed file systems (NEW)(壓縮方式選擇如下)

poYBAGQFR_qADRTgAABYyQy1i-M766.png

以上的壓縮方式(ZLIB/LZ4/LZO/XZ)具體選擇哪一種需要根據(jù)longan/build/mkcmd.sh 中如下代碼使用的壓縮方式而定,如下代碼使用的是gzip 壓縮方式,則內(nèi)核File systems 中配置需選擇LZO 壓縮方式,若使用的是xz, 則需選擇XZ 壓縮方式。

${ROOTFS} ${LICHEE_PLAT_OUT}/rootfs.squashfs -root-owned -no-progress -comp gzip -noappend

2.4 源碼目錄介紹

2.4.1 UBOOT 源碼目錄

u-boot-2018drivers ├──sunxi_flash ---sunxi_flash的初始化/退出/讀/寫/擦除等flash接口 ├─mmc ---mmc接口代碼 ├─nand ---nand接口代碼 ├─spinor ---spi nor接口代碼 ├─sunxi_flash.c ---sunxi_flash操作接口 └──其他 ├── spi --sunxi_spi的接口代碼 ├─sunxi_spi.c ---具體代碼的實現(xiàn) ├──mtd ├─spi ├─sf_probe.c ---nand接口代碼 ├─spinor ---spi nor接口代碼 ├─sunxi_flash.c ---sunxi_flash

2.4.2 KERNEL 源碼目錄

longankernellinux-4.9drivers ├── mtd ├─spi-nor ├─spi-nor.c ---spi nor驅(qū)動代碼 └──其他 ├── spi --spi的接口代碼 └── makefile ---編譯文件 版

3 接口描述

3.1 驅(qū)動物理層接口

3.1.1 spi_nor_erase

static int spi_nor_erase(struct mtd_info *mtd, struct erase_info *instr)

description:mtd erase interface @mtd: MTD device structure @instr: erase operation descrition structure return:success return 0,fail return fail code**

3.1.2 spi_nor_read

static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)

description:mtd read interface @mtd:MTD device structure @from: offset to read from MTD device @len: data len @retlen: had read data len @buf: data buffer return:success return max_bitflips,fail return fail code**

3.1.3 spi_nor_write

static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf)

description:mtd write data interface @to: offset to MTD device @len: want write data len @retlen:return the writen len @buf: data buffer return: success return 0, fail return code fail

3.1.4 spi_nor_lock

static int spi_nor_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len) description:check block is badblock or not

@mtd:MTD device structure @ofs: offset the mtd device start (align to simu block size) @len:The length of the operating return: success return 0, fail return code fail

3.1.5 spi_nor_unlock

static int spi_nor_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len) description:check block is badblock or not

@mtd:MTD device structure @ofs: offset the mtd device start (align to simu block size) @len:The length of the operating return: success return 0, fail return code fail

3.1.6 spi_nor_is_locked

static int spi_nor_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len) description:check block is badblock or not

@mtd:MTD device structure @ofs: offset the mtd device start (align to simu block size) @len:The length of the operating return: Is lock return 1, else return 0

3.1.7 spi_nor_has_lock_erase

static int spi_nor_has_lock_erase(struct mtd_info *mtd, struct erase_info *instr)

description:mtd has lock erase interface,F(xiàn)irst unlock to operate space, after the completion of the flash lock up @mtd: MTD device structure @instr: erase operation descrition structure return:success return 0,fail return fail code

3.1.8 spi_nor_has_lock_write

static int spi_nor_has_lock_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf)

description:mtd has lock write data interface,F(xiàn)irst unlock to operate space, after the completion of the flash lock up @to: offset to MTD device @len: want write data len @retlen:return the writen len @buf: data buffer return: success return 0, fail return code fail

3.2 Uboot 應用接口

3.2.1 sunxi_flash_spinor_probe

static int sunxi_flash_spinor_probe(void)

description:SPINOR initialization,Set the storage type。 return:zero on success, else a negative error code.

3.2.2 sunxi_flash_spinor_init

static int sunxi_flash_spinor_init(int boot_mode, int res)

description:SPINOR initialization。 @boot_mode:Working mode @res:The default is 0 return:zero on success, else a negative error code.

3.2.3 sunxi_flash_spinor_exit

int sunxi_flash_spinor_exit(void)

description:Release registration is a resource for applications. return:zero on success, else a negative error code.

3.2.4 sunxi_flash_spinor_write

static int sunxi_flash_spinor_write(uint start_block, uint nblock, void *buffer)

description:mtd write data interface. @start_block:want write start sector @nblock:want write sectorcount @buffer:data buffer

return:zero on success, else a negative error code.

3.2.5 sunxi_flash_spinor_write

static int sunxi_flash_spinor_write(uint start_block, uint nblock, void *buffer)

description:mtd readdata interface. @start_block:want read start sector @nblock:want read sector count @buffer:data buffer return:zero on success, else a negative error code.

3.2.6 sunxi_flash_spinor_erase

static int sunxi_flash_spinor_erase(int erase, void *mbr_buffer)

description:erase boot || partition data. @erase:erase flag @buffer:The default is NULL return:zero on success, else a negative error code.

3.2.7 sunxi_flash_spinor_force_erase

int sunxi_flash_spinor_force_erase(void)

description:erase boot & partition data. return:zero on success, else a negative error code.

3.2.8 sunxi_flash_spinor_flush

int sunxi_flash_spinor_flush(void)

description:Flush physical cache data to flash.

return:zero on success, else a negative error code.

3.2.9 sunxi_flash_spinor_download_spl

static int sunxi_flash_spinor_download_spl(unsigned char *buf, int len, unsigned int ext)

description:write boot0. @buf:boot0 data buffer @len:boot0 data len @ext:storage type return:zero on success, else a negative error code.

3.2.10 sunxi_flash_spinor_download_toc

static int sunxi_flash_spinor_download_toc(unsigned char *buf, int len, unsigned int ext)

description:write uboot. @buf:uboot data buffer @len:uboot data len @ext:storage type return:zero on success, else a negative error code.

4 使用例子

4.1 uboot shell 使用

4.1.1 sunxi_flash

mem_addr:內(nèi)存地址,0x40000000 之后可以隨便選取如:0x45000000,0x46000000 part_name:分區(qū)文件名,boot-resource、env、boot、rootfs size:可以省略,默認讀取整個分區(qū)文件

sunxi_flash read [size] 讀取flash 中的分區(qū)文件到內(nèi)存中 例:使用sunxi_flash read 命令將boot 分區(qū)讀入到0x49000000 中,然后使用md 命令讀取 0x49000000 中的內(nèi)容。

pYYBAGQFR_qAEBPqAAAvtmyqYbA230.png

驗證方法:

0x49000000 讀入前與讀入后數(shù)據(jù)有沒有發(fā)生變化

在out/pack_out 目錄下找到對應的分區(qū)文件,使用hexdump -Cv boot.fex -n 500 命 令輸出分區(qū)文件的數(shù)據(jù),對比一致即讀入成功。

poYBAGQFR_uAIwXwAAAqRJEczBw944.png

sunxi_flash write [size] 將內(nèi)存中的數(shù)據(jù),寫入到分區(qū)中 例: 1)使用mm 命令修改內(nèi)存內(nèi)容

pYYBAGQFR_uAcUSyAAA1ppyDv8U903.png

2)使用sunxi_flash write 0x44000000 env 將內(nèi)存中的數(shù)據(jù)寫入env 分區(qū)

poYBAGQFR_yAdq7bAAATn8XEi-M506.png

3)重新將env 分區(qū)讀入內(nèi)存中,對比一致表示寫入成功

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2788

    瀏覽量

    50372
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11511

    瀏覽量

    213781
  • u-boot
    +關(guān)注

    關(guān)注

    0

    文章

    122

    瀏覽量

    38830
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    EAC0945 linux開發(fā)指南

    EAC0945 linux開發(fā)指南
    發(fā)表于 09-28 12:40

    EAC0945 linux開發(fā)指南

    `EAC0945 linux開發(fā)指南`
    發(fā)表于 10-31 12:18

    Rockchip Linux SDK uboot logo開發(fā)指南

    arm嵌入式vs-rk3399 板卡uboot logo 開發(fā)指南概述:本文檔主要介紹 rockchip linux sdk uboot logo 顯示的相關(guān)功能、配置以及開發(fā)過程中的注意事項。適用于 rockhip
    發(fā)表于 10-09 08:12

    CPLD FPGA高級應用開發(fā)指南

    CPLD FPGA高級應用開發(fā)指南
    發(fā)表于 04-15 10:56 ?58次下載
    CPLD FPGA高級應用<b class='flag-5'>開發(fā)指南</b>

    Tiny6410 Linux開發(fā)指南詳解

    Tiny6410 Linux 開發(fā)指南
    發(fā)表于 07-08 17:12 ?210次下載
    Tiny6410 <b class='flag-5'>Linux</b><b class='flag-5'>開發(fā)指南</b>詳解

    A64開發(fā)板LCD開發(fā)指南

    A64開發(fā)板LCD開發(fā)指南,驅(qū)動開發(fā)指南
    發(fā)表于 06-21 17:02 ?0次下載

    彩光燈開發(fā)指南

    彩光燈開發(fā)指南
    發(fā)表于 12-29 20:15 ?0次下載

    取暖器-油汀開發(fā)指南

    取暖器-油汀開發(fā)指南
    發(fā)表于 12-25 00:15 ?0次下載

    Linux的平臺下Mini210S裸機程序開發(fā)指南

    Linux的平臺下Mini210S裸機程序開發(fā)指南
    發(fā)表于 10-29 10:52 ?59次下載
    <b class='flag-5'>Linux</b>的平臺下Mini210S裸機程序<b class='flag-5'>開發(fā)指南</b>

    Rockchip Linux SDK的開發(fā)指南的詳細資料說明

    本文檔的主要內(nèi)容詳細介紹的是Rockchip Linux SDK的開發(fā)指南的詳細資料說明。
    發(fā)表于 01-10 17:17 ?74次下載
    Rockchip <b class='flag-5'>Linux</b> SDK的<b class='flag-5'>開發(fā)指南</b>的詳細資料說明

    迅為RK3399開發(fā)板嵌入式linux開發(fā)指南

    迅為RK3399開發(fā)板嵌入式linux開發(fā)指南迅為RK3399開發(fā)板發(fā)布《北京迅為嵌入式linux開發(fā)指
    發(fā)表于 11-01 16:58 ?79次下載
    迅為RK3399<b class='flag-5'>開發(fā)</b>板嵌入式<b class='flag-5'>linux</b><b class='flag-5'>開發(fā)指南</b>

    nRF52832開發(fā)指南-上冊

    nRF52832開發(fā)指南-上冊
    發(fā)表于 06-16 14:15 ?80次下載

    Tina_Linux_系統(tǒng)軟件開發(fā)指南

    Tina_Linux_系統(tǒng)軟件開發(fā)指南
    的頭像 發(fā)表于 03-02 15:25 ?3116次閱讀
    Tina_<b class='flag-5'>Linux</b>_系統(tǒng)軟件<b class='flag-5'>開發(fā)指南</b>

    Tina Linux配置開發(fā)指南

    Tina Linux配置開發(fā)指南
    的頭像 發(fā)表于 03-02 15:28 ?1.8w次閱讀
    Tina <b class='flag-5'>Linux</b>配置<b class='flag-5'>開發(fā)指南</b>

    【北京迅為】itop-龍芯2k1000開發(fā)指南Linux基礎入門vim 編輯器

    【北京迅為】itop-龍芯2k1000開發(fā)指南Linux基礎入門vim 編輯器
    的頭像 發(fā)表于 10-25 14:56 ?683次閱讀
    【北京迅為】itop-龍芯2k1000<b class='flag-5'>開發(fā)指南</b><b class='flag-5'>Linux</b>基礎入門vim 編輯器