am335x nand驅動移植

2021-08-01 08:52:57 字數 3296 閱讀 4351

**:

使用ok335xd核心板上的nand flash,無論是速度還是穩定性,都比sd卡好,所以接下來的任務是使用sd中的u-boot操作nand flash,把需要的映象燒錄進去之後,就可以從nand flash啟動了!

第一步:按照《u-boot for am335x》的步驟準備好:

ok335x開發板

按照ti公司官方文件的要求,格式化的sd卡(create-sdcard.sh)

準備乙份編譯通過的可用的u-boot源**(uart/mmc0/eth/gpio/i2c功能)

uimage和檔案系統映象

第二步:修改u-boot源**中mux部分:

static struct module_pin_mux nand_pin_mux = ,,,

,,,,

,,,,

,,,,

};別忘了執行下面這句:

configure_module_pin_mux(nand_pin_mux);

第三步:在u-boot源**中board_init函式中新增:

gpmc_init();

第四步:在include/configs/maria_am335x.h中新增:

#define config_cmd_nand

#define config_sys_max_nand_device      1

#define config_sys_nand_base            0x800000

#define config_nand_omap_gpmc

#define config_nand_omap_elm

#define config_sys_nand_5_addr_cycle

#define config_sys_nand_page_count      (config_sys_nand_block_size / \

config_sys_nand_page_size)

#define config_sys_nand_page_size       2048

#define config_sys_nand_oobsize         64

#define config_sys_nand_block_size      (128*1024)

#define config_sys_nand_bad_block_pos   nand_large_badblock_pos

#define config_sys_nand_eccpos         

#define config_sys_nand_eccsize         512

#define config_sys_nand_eccbytes        14

#define config_sys_nand_onfi_detection

#define config_nand_omap_eccscheme      omap_ecc_bch8_code_hw

#define config_sys_nand_u_boot_start    config_sys_text_base

#define config_sys_nand_u_boot_offs     0x80000

為什麼不直接只用config_nand,這些巨集不就跟著定義了嗎?

因為config_nand的含義是從nand啟動,而這裡只是要對nand flash進行讀取和燒寫操作,booting裝置還是sd卡。

第五步:修改arch/arm/cpu/armv7/am33xx/mem.c中的"gpmc_init"函式:

void gpmc_init(void)

;u32 size = gpmc_size_256m;

u32 base = config_sys_nand_base;

writel(0x00000008, &gpmc_cfg->sysconfig);

writel(0x00000000, &gpmc_cfg->irqstatus);

writel(0x00000000, &gpmc_cfg->irqenable);

writel(0x00000012, &gpmc_cfg->config);

writel(0, &gpmc_cfg->cs[0].config7);

sdelay(1000);

enable_gpmc_cs_config(gpmc_regs, &gpmc_cfg->cs[0], base, size);

}這是因為gpmc_init依賴於config_nand,要不然基本不幹活,因此去掉它的巨集判斷。

第六步:編譯它:

make arch=arm cross_compile=/opt/arm-arago-linux-gcc/usr/bin/arm-linux-gnueabihf- -j8 o=../build maria_am335x_config

make arch=arm cross_compile=/opt/arm-arago-linux-gcc/usr/bin/arm-linux-gnueabihf- -j8 o=../build all

第七步:將生成的mlo和u-boot.img放置到sd卡中:

cp ../build/mlo ../build/u-boot.img /run/media/maria/boot/

第八步:開發板插入sd卡,設定為從sd卡啟動,上電。

在命令提示符下輸入:

u-boot# set ipaddr 192.168.1.117

u-boot# set serverip 192.168.1.116

u-boot# tftp 0x82000000 mlo

u-boot# nand erase 0x0 0x20000

u-boot# nand write.i 0x82000000 0x0 0x20000

u-boot# tftp 0x82000000 u-boot.img

u-boot# nand erase 0x80000 0x40000

u-boot# nand write.i 0x82000000 0x80000 0x40000

這些命令的含義是,從tftp伺服器上獲取mlo和u-boot.img,存放在sdram的0x82000000處,並分別燒寫在nand flash的0x0和0x80000位址。拔除sd卡,重新上電,就能看到u-boot從nand flash啟動的串列埠列印資訊了!

notice: 存放在tftp上的mlo和u-boot.img不能是forlinx光碟裡面的映象,也不是上面所述的這個,而是需要使用全新的源**重新編譯。因為forlinx和這裡的mlo和u-boot.img都是從sd卡啟動的,全新編譯出來的應該是從nand flash啟動。參照boards.cfg檔案!

AM335X linux嵌入式平台can驅動移植

由於板子需要用到can 需要配置kernel支援can匯流排 配置kernel 一 確認原理圖 can0 tx d18 can0 rx d17 二 確認暫存器 在am3359.pdf中 檢視模式 這裡tx rx都是mode2 配置pin的時候需要按照這個來配置 檢視暫存器位址 這裡檢視 d can0...

AM335X Nand Flash 啟動除錯

nand 除錯成功了。具體修改下面描述 硬體修改 根據原理圖發現 am335x 目前預設是 sd 卡啟動,所以需要配置一下 sysboot 從nand啟動,官方文件 這裡對 sysboot 的配置有詳細的介紹,結合 am335x technical reference.pdf 和 原理圖找到對應的 ...

am335x watchdog 裝置出錯

am335x watchdog 裝置節點開啟失敗。如果是直接將omap wdt 直接編譯成uimage,這樣會出現開啟檔案節點失敗的情況。如果單獨編譯成模組在後面檔案系統內插入則不會。將omap wdt 單獨編譯成模組,在檔案系統層新增。在kernel3.2中 make menuconfig dev...