新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AM335x(TQ335x)學習筆記——u-boot-2014.10移植

        AM335x(TQ335x)學習筆記——u-boot-2014.10移植

        作者: 時間:2016-11-28 來源:網絡 收藏
        最近移植了下u-boot-2014.10到TQ335x,如果基于am335x evm進行移植,需要修改的地方并不多。

        由于TI的am335x evm開發使用了一個eeprom保存了板載配置信息,用來區分不同板子的型號的,而TQ335x沒有這個eeprom,因此,需要修改eeprom相關的部分,使u-boot適應TQ335x開發板。

        本文引用地址:http://www.104case.com/article/201611/322817.htm

        使用source insight查看代碼,很容易發現,所有獲取板載配置的部分都是通過讀取eeprom獲得的,因此,首選修改read_eeprom(board/ti/am335x/board.c)函數,具體的修改如下:

        1. staticintread_eeprom(structam335x_baseboard_id*header)
        2. {
        3. #if1
        4. strcpy(header->name,"TQ335x");
        5. #else
        6. /*Checkifbaseboardeepromisavailable*/
        7. if(i2c_probe(CONFIG_SYS_I2C_EEPROM_ADDR)){
        8. puts("CouldnotprobetheEEPROM;somethingfundamentally"
        9. "wrongontheI2Cbus.");
        10. return-ENODEV;
        11. }
        12. /*readtheeepromusingi2c*/
        13. if(i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR,0,2,(uchar*)header,
        14. sizeof(structam335x_baseboard_id))){
        15. puts("CouldnotreadtheEEPROM;somethingfundamentally"
        16. "wrongontheI2Cbus.");
        17. return-EIO;
        18. }
        19. if(header->magic!=0xEE3355AA){
        20. /*
        21. *readtheeepromusingi2cagain,
        22. *butuseonlya1byteaddress
        23. */
        24. if(i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR,0,1,(uchar*)header,
        25. sizeof(structam335x_baseboard_id))){
        26. puts("CouldnotreadtheEEPROM;something"
        27. "fundamentallywrongontheI2Cbus.");
        28. return-EIO;
        29. }
        30. if(header->magic!=0xEE3355AA){
        31. printf("Incorrectmagicnumber(0x%x)inEEPROM",
        32. header->magic);
        33. return-EINVAL;
        34. }
        35. }
        36. #endif
        37. return0;
        38. }
        通過上述修改,u-boot不去讀取eeprom,而是直接將header的name賦值為"TQ335x",后面可以根據這一配置區分是否為TQ335x開發板。

        然后是修改get_dpll_ddr_params(board/ti/am335x/board.c)函數,具體的修改內容如下:

        1. conststructdpll_params*get_dpll_ddr_params(void)
        2. {
        3. structam335x_baseboard_idheader;
        4. enable_i2c0_pin_mux();
        5. i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED,CONFIG_SYS_OMAP24_I2C_SLAVE);
        6. if(read_eeprom(&header)<0)
        7. puts("CouldnotgetboardID.");
        8. if(board_is_tq335x(&header)||board_is_evm_sk(&header))
        9. return&dpll_ddr_evm_sk;
        10. elseif(board_is_bone_lt(&header))
        11. return&dpll_ddr_bone_black;
        12. elseif(board_is_evm_15_or_later(&header))
        13. return&dpll_ddr_evm_sk;
        14. else
        15. return&dpll_ddr;
        16. }
        然后是修改sdram_init(board/ti/am335x/board.c)函數,具體的修改內容如下:
        1. voidsdram_init(void)
        2. {
        3. __maybe_unusedstructam335x_baseboard_idheader;
        4. if(read_eeprom(&header)<0)
        5. puts("CouldnotgetboardID.");
        6. if(board_is_evm_sk(&header)){
        7. /*
        8. *EVMSK1.2Aandlaterusegpio0_7toenableDDR3.
        9. *Thisissafeenoughtodoonolderrevs.
        10. */
        11. gpio_request(GPIO_DDR_VTT_EN,"ddr_vtt_en");
        12. gpio_direction_output(GPIO_DDR_VTT_EN,1);
        13. }
        14. if(board_is_evm_sk(&header)||board_is_tq335x(&header))
        15. config_ddr(303,&ioregs_evmsk,&ddr3_data,
        16. &ddr3_cmd_ctrl_data,&ddr3_emif_reg_data,0);
        17. elseif(board_is_bone_lt(&header))
        18. config_ddr(400,&ioregs_bonelt,
        19. &ddr3_beagleblack_data,
        20. &ddr3_beagleblack_cmd_ctrl_data,
        21. &ddr3_beagleblack_emif_reg_data,0);
        22. elseif(board_is_evm_15_or_later(&header))
        23. config_ddr(303,&ioregs_evm15,&ddr3_evm_data,
        24. &ddr3_evm_cmd_ctrl_data,&ddr3_evm_emif_reg_data,0);
        25. else
        26. config_ddr(266,&ioregs,&ddr2_data,
        27. &ddr2_cmd_ctrl_data,&ddr2_emif_reg_data,0);
        28. }
          上一頁 1 2 下一頁

        關鍵詞: AM335xTQ335xu-boo

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 平利县| 介休市| 年辖:市辖区| 鄂尔多斯市| 司法| 内丘县| 顺平县| 平安县| 浪卡子县| 通渭县| 修武县| 旬邑县| 阿拉善右旗| 白河县| 军事| 郎溪县| 滨州市| 新民市| 诏安县| 綦江县| 城固县| 楚雄市| 大理市| 丹巴县| 甘泉县| 张家界市| 电白县| 沁水县| 阿尔山市| 苍梧县| 自治县| 含山县| 科尔| 海南省| 苏尼特右旗| 黎平县| 吉木萨尔县| 宕昌县| 定襄县| 莲花县| 惠东县|