色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

全志Tina Linux NOR Flash系統(tǒng)開發(fā)指南 最詳細版本 支持所有全志芯片

嵌入式Linux那些事 ? 來源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2022-12-26 16:47 ? 次閱讀

1 簡介

  • 編寫目的

此文檔描述Sunxi NOR 模塊的使用方法,為相關人員調試提供指導

  • 適用范圍
    • boot0: 適用于brandy-2.0
    • u-boot: 適用于u-boot-2018
    • kernel: 適用于linux-4.9/linux-5.4 內核

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

2 模塊介紹

2.1 模塊功能介紹

Linux 中SPINOR 體系結構如下圖所示:

image-20221216110030034

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 的工作隊列中,啟動內核線程隊列,處理隊列
中的msg。
對應代碼目錄:drivers/spi/spi.c
SPI controller driver:這層初始化SPI 控制器頻率、時鐘模式、cs 有效電平、大小端等
配置,同時處理上層傳下來的msg,通過CPU/DMA 方式傳輸數(shù)據(jù)到FIFO,再傳輸給外設
SPINOR。
對應代碼目錄:drivers/spi/spi-sunxi.c

2.2 相關術語介紹

術語 解釋說明
Sunxi 指Allwinner 的一系列SOC 硬件平臺
SPI Serial Peripheral Interface,同步串行外設接口
NOR Flash NOR Flash 是一種非易失閃存技術,是Intel 在1988 年創(chuàng)建
MTD MTD(memory technology device 內存技術設備) 是用于訪問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
  1. 打包普通固件
#./build.sh clean
#./build.sh
#./build.sh pack
  1. 打包卡打印固件
#./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><default>
spi_cs = port:PC01<4><1><2><default>
spi0_mosi = port:PC02<4><0><2><default>
spi0_miso = port:PC03<4><0><2><default>
spi0_wp = port:PC04<4><0><2><default>
spi0_hold = port:PC05<4><0><2><default>

其中:

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 的細調采樣的采樣延時,uboot、kernel 也會用到,默認不填等于
0xaaaaffff
sample_mode:boot0 的細調采樣的采樣模式,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 ---->

image-20221216110954138

進入SPI Support

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

image-20221216111017858

進入sunxi_flash_support

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

image-20221216111039312

2.3.4 KERNEL 配置

2.3.4.1 SPINOR-驅動配置
#cd kernel/liunx-4.9
#make ARCH=arm menuconfig

進入Device Drivers

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

image-20221216111201111

進入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 ---->

image-20221216111231797

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

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

image-20221216111301751

2.3.4.2 cmdline 方式選擇
Boot opttions ---->

image-20221216111354759

進入Boot options

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

image-20221216111427021

進入kernel command line type

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

image-20221216111454068

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

進入File systems

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

image-20221216111527624

? 進入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)(壓縮方式選擇如下)

image-20221216111604498

以上的壓縮方式(ZLIB/LZ4/LZO/XZ)具體選擇哪一種需要根據(jù)longan/build/mkcmd.sh 中如下代碼使用的壓縮方式而定,如下代碼使用的是gzip 壓縮方式,則內核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驅動代碼
└──其他
├── spi --spi的接口代碼
└── makefile ---編譯文件

3 接口描述

3.1 驅動物理層接口

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:內存地址,0x40000000 之后可以隨便選取如:0x45000000,0x46000000

part_name:分區(qū)文件名,boot-resource、env、boot、rootfs

size:可以省略,默認讀取整個分區(qū)文件

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

image-20221216112650227

驗證方法:

  1. 0x49000000 讀入前與讀入后數(shù)據(jù)有沒有發(fā)生變化
  2. 在out/pack_out 目錄下找到對應的分區(qū)文件,使用hexdump -Cv boot.fex -n 500 命
    令輸出分區(qū)文件的數(shù)據(jù),對比一致即讀入成功。

image-20221216112713299

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

image-20221216112743939

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

image-20221216112759532

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

image-20221216112809980  

審核編輯:湯梓紅

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

    關注

    87

    文章

    11312

    瀏覽量

    209695
  • MPU
    MPU
    +關注

    關注

    0

    文章

    360

    瀏覽量

    48837
  • Tina
    +關注

    關注

    2

    文章

    45

    瀏覽量

    16992
  • 全志芯片
    +關注

    關注

    2

    文章

    5

    瀏覽量

    2815
收藏 人收藏

    評論

    相關推薦

    8月芯片開源項目分享合集

    Linux內核驅動的源碼。 linux-card 作者:syske 作者本人的第一塊F1C200S的實驗板,踩了很多坑,更新了六個版本
    發(fā)表于 09-02 10:25

    &OpenHarmony】三款支持OpenHarmony開發(fā)板在開放原子開源基金會OpenHarmony見面會實況分享

    成果,見面會在B站等多個平臺進行了全程直播,累計觀看人數(shù)超2W人。其中志在會上分享了3款支持OpenHarmony的芯片/開發(fā)板,分別是XR806、T507和D1。第一款是
    發(fā)表于 11-15 16:16

    &OpenHarmony】三款支持OpenHarmony開發(fā)板在開放原子開源基金會OpenHarmony見面會實況分享

    分享了3款支持OpenHarmony的芯片/開發(fā)板,分別是XR806、T507和D1。第一款是的D1
    發(fā)表于 11-15 16:48

    輕量系統(tǒng)開發(fā)套件介紹: XR806 開發(fā)套件

    XR806 開發(fā)套件是科技旗下子公司廣州芯之聯(lián)研發(fā)設計的一款支持WiFi和BLE的高集
    發(fā)表于 04-21 13:51

    全新Tina Linux v5.0釋放!帶來全新AIoT產品開發(fā)體驗

    Tina Linux基于linux內核深度定制開發(fā)的AIoT
    發(fā)表于 07-12 18:25

    【免費試用04期】V853開發(fā)板試用活動

    】編譯 Tina Linux部分之openWrt 編譯【V853開發(fā)板試用】編譯 Tina
    發(fā)表于 07-21 10:27

    V853開發(fā)板試用】開箱及初識之美

    , 同時支持供電和數(shù)據(jù)傳輸PMU:AXP2101板身大小:長 118mm寬 75mmPCB板層:4層板系統(tǒng)配置官方支持
    發(fā)表于 08-21 23:47

    Ubuntu官方發(fā)布適配D1-H哪吒開發(fā)板的鏡像

    ,融入OS”為核心,建立起了豐富的Linux開發(fā)生態(tài),目前開發(fā)板已經成功適配了自研Tina
    發(fā)表于 08-23 09:24

    V853開發(fā)板試用】V853開發(fā)板試用測評報告

    ,很好滿足不同任務的場景。3.軟件資源V853系統(tǒng)配置Tina Linux 5.0系統(tǒng),基于
    發(fā)表于 08-29 02:09

    【開源硬件】芯片系列優(yōu)秀開源工程分享

    。 YuzukiRuler Pro采用 D1-H為主控,最大支持2GB內存,256GB儲存的全面屏Linux小尺子,RISCV64 指令集,板載UART和OTG,還將屏幕升級為一個
    發(fā)表于 09-14 09:49

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

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

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

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

    Linux NOR開發(fā)指南

    Linux NOR開發(fā)指南
    的頭像 發(fā)表于 03-06 09:55 ?974次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>NOR</b><b class='flag-5'>開發(fā)指南</b>

    h616和h6的區(qū)別

    h616和h6的區(qū)別 h616和
    的頭像 發(fā)表于 08-16 11:01 ?9990次閱讀

    AW_R329_Tina_Linux_開發(fā)入門_v0.5

    AW_R329_Tina_Linux_開發(fā)入門_v0.5
    發(fā)表于 10-19 15:11 ?3次下載
    主站蜘蛛池模板: nxgx69日本护士| 高h乱np甄宓| 国产精品一区二区20P| 四虎国产精品永久免费入口| 高清国产在线播放成人| 伊人免费在线| 欧美精品一区二区三区视频| 大香伊蕉在人线国产97| 婷婷六月激情综合一区| 免费鲁丝片一级在线观看| 丰满少妇69激懒啪啪无码| 18video性欧美19sex高清| 日日摸天天添天天添无码蜜臀| 国产亚洲999精品AA片在线爽| 中文字幕人成人乱码亚洲影视S| 欧美日韩看看2015永久免费| 久久国产av偷拍在线| 成人午夜剧场| 亚洲免费福利在线视频| 女人麻豆国产香蕉久久精品| 国产不卡在线观看视频| 一个人免费视频在线观看 | 国产人妻精品久久久久久很牛 | 亚洲精品无码专区在线播放| 乳色吐息在线观看全集免费观看 | 日日噜噜噜夜夜爽爽狠狠| 男人天堂黄色| 国产午夜精品自在自线之la| 俄罗斯摘花| WWW亚洲精品久久久乳| 2020国产成人精品视频人| 全部免费特黄特色大片看片| 狠狠啪 日日啪| xxx性欧美在线观看| 亚洲精品国产第一区第二区| 美女隐私黄www视频| 国产精品在线手机视频| 光溜溜的美女直播软件| 538prom国产在线视频一区| 一日本道伊人久久综合影| 亚洲日本欧美国产在线视|