DAVINCI DM3730開發攻略——U-BOOT-2010.06的移植

說來慚愧,又很長時間沒更新文章了,原本這篇文章能夠春節過來搞定的,結果春節回到公司,大客戶一直要求抓緊時間設計DM3730平臺的720P寬動態低照度相機產品,和另外兩款多網口的DM3730產品的樣機,南京老客戶也在催DM3730 3G工業級板子樣機,剛搞定兩個老客戶,又有兩個新客戶找咱們設計DM3730新產品,一個是3G+WIFI 4CIF視頻分析產品,另外一個客戶人臉識別車載方面的產品,整個桐燁科技都很忙。如今又不敢招人,畢竟冷酷的現實不得不面對:這個掌握無敵的宇宙真理國度經濟不斷下行,搞得第一季度咱們也沒有什麼大單子,畢竟給客戶作新樣機是沒什麼錢賺的,都是培訓客戶。雖然如今是春天,但經濟的寒冬纔來臨,通貨膨脹形成公司運營成本飛漲,總感受很累,有時本身很想靜心鑽進本公司新產品的研發去,可是客戶那邊有些關鍵的軟件問題還得本人親自解決,累也得堅持下去。linux

上篇文章介紹DM3730xloader的移植,這邊介紹DM37302 boot階段移植:u-boot-2010.06的移植,其實本人已經寫過DM6446DM36X平臺UBOOT的文章,可是因爲平臺和版本不同,因此這裏單獨一篇,對有些人來講可能寫得比較膚淺,請不要見笑,目的是完善本身的DM3730開發攻略,讓有興趣在這方面開發的生手提供一點點幫助。這個u-boot-2010.06源碼存放的位置在《DAVINCIDM3730開發攻略——DVSDK4_03和雙核CODEC機制介紹.doc》已經介紹。下面咱們開始DM3730進行u-boot-2010.06的移植工做。android


1、裁剪和交叉編譯環境變量設置算法

   u-boot-2010.06-psp04.02.00.07.sdk更名u-boot-2010.06,簡潔;vim

   1、總的Makefile修改api


   對u-boot-2010.06/Makefile進行修改,服務器

   屏蔽第139140行:網絡

   #      examples/standalone 架構

   #      examples/apiide

   而後把u-boot-2010.06/examples文件夾刪除掉,簡潔;工具


   第159行的修改成:

   CROSS_COMPILE = arm-arago-linux-gnueabi-

   這個就是DVSDK4——03自帶的交叉編譯工具,關於這個交叉編譯工具,TI作得很全面了,提供很 多免費的應用程序LIB等等。


   第244行修改成:

   #LIBS += api/libapi.a

   屏蔽,而後把u-boot-2010.06/api,簡潔,和項目不相關;


  2、涉及到交叉編譯環境的u-boot-2010.06\arch\arm\config.mk24行改成:

  CROSS_COMPILE =arm-arago-linux-gnueabi-


二:刪除多餘文件夾

   這個DVSDK4_03自帶的u-boot-2010.06-psp04.02.00.07.sdk很佔空間,也比較亂。很不便於開發和備份,咱們就是要把68M字節的變成20M字節簡化版(bz2gz壓縮的通常才3.4M的大小)。

注意,下面介紹的有些目錄下是刪除文件夾,有些是刪除文件,不要搞混;

   1、刪除u-boot-2010.06/arch/除了arm文件夾外其餘全部文件夾

其餘非arm平臺去掉,佔空間,囉嗦。


   2、刪除u-boot-2010.06/arch/armarm_cortexa8外的其餘全部文件夾

DM3730屬於arm cortex-A8架構(前幾篇文章寫成COTEX-A8了,系本人簡寫錯誤,有時本人直接跟客戶就是ARM-A8的稱呼)。DM6446DM6467DM6467TDM365DM368都是比較差勁的ARM926EJS架構。

   3、刪除u-boot-2010.06/arch/arm/arm_cortexa8/omap3文件外,刪除其餘文件夾,

就是刪除mx51s5pc1xxti81xx文件夾,DM3730/DM3725芯片屬於OMAP3平臺,這裏邊還包括OMAP35302010年拿來作MOTO 智能手機的OMAP3630等芯片。

   4、保留u-boot-2010.06/arch/arm/include/asm/下面的三個文件夾:

arch-omaparch-omap3proc-armv,同這個目錄下的那些.h文件不要刪除,這一點要注意一下。


   5、刪除u-boot-2010.06/board/ti外的其餘全部文件夾;

  UBOOT版本愈來愈高,新的廠商的板子不斷加進去,不少,很煩,很佔空間,對咱們專一開發某個平臺很差,因此咱們接把不相關的板子平臺去掉。


   6、刪除u-boot-2010.06/board/tievm外的其餘全部文件夾和文件;

同時TI文件夾也保留好幾家第三方的板子,好比最典型的beagle xM,還有ti DM8148 DM8168的。咱們直接使用ti evm板,或者參考其餘ARM 學習板有關UBOOT移植的移植,從新起個我的的名字或公司名字,修改對應Makefile等等,太多文章介紹了。


   7、刪除u-boot-2010.06/include/configsomap3_evm.h其餘文件(注意這裏是文件);

這個目錄下的頭文件和平臺有關,DM3730使用的是omap3_evm.h,其餘頭文件能夠幹掉。

   8、刪除u-boot-2010.06/ nand_splonenand_ipl

目前在DAVINCI平臺還沒發覺用到onenand的東西,能夠去掉;


   好了,通過上面的刪除工做,這個u-boot-2010.06已經很簡潔了,壓縮備份很方便,固然還能夠刪除更簡潔的,這裏就不詳細說了。


三:編譯u-boot-2010.06

u-boot-2010.06/下生成build-u-boot-all.shbuild-u-boot-tmp.sh的兩個文件:

build-u-boot-all.sh內容爲:


exportPATH=$PATH:/home/davinci/dm3730/dvsdk4_03/linux-devkit/bin:

make distclean

makeomap3_evm_config

make

cp u-boot.bindm3730_uboot.bin

cp u-boot.bin/tftpboot/dm3730_uboot.bin


上面的會直接讀取總的Makefile3000多行的:

omap3_evm_config : unconfig

      @$(MKCONFIG) $(@:_config=) armarm_cortexa8 evm ti omap3

編譯參數,這樣會自動去選擇編譯,u-boot-2010.06\arch\arm\cpu\arm_cortexa8\omap3\裏邊的源碼和u-boot-2010.06\board\ti\evm\裏邊的源碼,而且指定include u-boot-2010.06/include/configs/omap3_evm.h的平臺頭文件。


build-u-boot-tmp.sh內容爲


exportPATH=$PATH:/home/davinci/dm3730/dvsdk4_03/linux-devkit/bin:

make

cp u-boot.bindm3730_uboot.bin

cp u-boot.bin/tftpboot/dm3730_uboot.bin


對這兩個sh文件進行:

chmod +x build-u-boot-all.sh

chmod +x build-u-boot-tmp.sh

而後第一次或者每次作了make distclean動做後,都有先執行./ build-u-boot-all.sh,進行omap3_evm_config。之後改動改動源碼的時候能夠不要重複make distcleanmake omap3_evm_config,直接使用./build-u-boot-tmp.sh編譯就能夠了。build-u-boot-all.shbuild-u-boot-tmp.sh文件自動幫你copy文件到主機tftp server對應的目錄/tftpboot/


4、修改移植

上面第三點已經講明如何連接編譯omap3_evm_config ,那麼咱們如今能夠進行對應的移植和修改源碼。

1、針對DM3730芯片,咱們先從u-boot-2010.06/include/configs/omap3_evm.h這個文件修改,讓他指向對應的芯片平臺;


#defineCONFIG_ARMCORTEXA8  1     /* This is an ARM V7 CPU core */

#defineCONFIG_OMAP                            1     /*in a TI OMAP core */

#defineCONFIG_OMAP34XX           1     /* which is a 34XX */

#defineCONFIG_OMAP3430             1     /* which is in a 3430 */

#defineCONFIG_OMAP3_EVM        1     /* working with EVM*/


這個頭文件最前面的宏定義講明瞭DM3730所屬的ARM架構,T也屬於TI 公司 OMAP系列當中的OMAP34XX家族的芯片,OMAP3430-à3530--à3630-àDM3730是軟件硬件架構一脈相承的芯片系列。咱們選擇TI EVM板子模式。


/*

* select serial console configuration

*/

#if 1

#defineCONFIG_CONS_INDEX             3

#defineCONFIG_SYS_NS16550_COM3        OMAP34XX_UART3

#defineCONFIG_SERIAL3                3     /* UART3 on TY OMAP3 EVM */

#else

#defineCONFIG_CONS_INDEX             2

#defineCONFIG_SYS_NS16550_COM2        OMAP34XX_UART2

#defineCONFIG_SERIAL2                2     /* UART2 on TY OMAP3 EVM TEST */

#endif

TI EVM定義的LINUX調試串口指定是UART1DM3730DM6446同樣一共有3UART,均可以用來作LINUX軟件調試的串口,咱們的板子也和其餘公司同樣使用UART3作爲調試串口,而不是TIEVM指定的UART1,由於上篇文章《DAVINCIDM3730開發攻略——xload-1.51移植》提到過DM3730BOOT MODE,有種BOOT模式使用了SD-àNAND-àUART3,因此咱們這裏使用UART3。而往下看找到有關UBOOT串口調試的BOOTDELAY


/* Environmentinformation */

#defineCONFIG_BOOTDELAY 1

這個UBOOTdelay等待用戶按鍵調試時間太長了,把10秒改爲1秒,有些產品爲了加快BOOT 時間,賣出去的產品不須要調試,也能夠直接改成0


繼續往下看,

/* commands toinclude */

#include<config_cmd_default.h>


這裏邊定義了不少CONFIG_CMD_XXX的功能,若是讓UBOOT編譯出來的文件比較小,可使用#undef把某些不經常使用的功能屏蔽掉。


#defineCONFIG_CMD_EXT2           /* EXT2 Support               */

#defineCONFIG_CMD_FAT              /* FAT support                  */

#defineCONFIG_CMD_JFFS2    /* JFFS2 Support              */

#define CONFIG_CMD_MTDPARTS    /* Enable MTD parts commands */

#define CONFIG_MTD_DEVICE    /* needed for mtdparts commands */

#define MTDIDS_DEFAULT                   "nand0=nand"

#define MTDPARTS_DEFAULT             "mtdparts=nand:256k(x-loader),"\

                                  "256k(u-boot-env),1280k(u-boot),"\

                                  "5m(kernel),-(fs)"

上面紅色字體是本人添加修改的,使能在UBOOT裏邊使用MTD分區。

同時咱們打算使用256K字節作爲u-boot 參數保存空間,偏移地址是x040000的地址,因此omap3_evm.h後面(320行左右的地方)提到的

#defineONENAND_ENV_OFFSET         0x00040000 /*environment starts here */

#defineSMNAND_ENV_OFFSET            0x00040000 /*environment starts here */

改爲上面的0x00040000


這裏首先聲明桐燁科技的DM3730板子NAND512M BYTEDDR也是512M BYTE,網口使用DM9000,不一樣公司的開發板估計有不一樣的配置,這個信息很重要,下面NAND分區定義和程序燒寫都須要這瞭解這方面的信息。


而後到看到#define CONFIG_EXTRA_ENV_SETTINGS 的修改:

定義這個CONFIG_EXTRA_ENV_SETTINGS前,須要補充一些NAND 存放XLAODUBOOTKERNEL等等知識,本人在上篇《DAVINCI DM3730開發攻略——xload-1.51移植》提到UBOOT 編譯處理的BIN文件存放在NAND FLASH的地方,這裏再更詳細描述一下:


//0x000000000000-0x000000040000: "X-Loader"(DM3730 xlaod存放在NAND的位置)

//0x000000040000-0x000000080000: "U-Boot Env"(uboot 參數存放在NAND的位置)

//0x000000080000-0x000000200000: "U-Boot"(uboot 自己存放在NAND的位置)

//0x000000200000-0x000000C00000: "Kernel"(kernel存放在NAND的位置)

//0x000000C00000-0x000008400000: "ubifs0"(主要的文件系統UBIFS存放在NAND的位置)

//0x000008400000-0x00000FC00000: "ubifs1"(備用的UBIFS存放在NAND的位置,也能夠不要)

//0x00000FC00000-0x000010000000: "user data"(保存一些用戶本身定義的數據)

//loadaddr ==0x80300000TFTP 下載XLAOD,UBOOT,KERNELBIN文件到內存的起始偏移地址)

//ubifs loadaddr== 0x81000000TFTP 下載比較大的UBIFSBIN文件到內存起始偏移地址)

//u-boot codeaddress == 0x80E80000UBOOT自己存放到內存運行的偏移地址)



這是咱們修改後的#define CONFIG_EXTRA_ENV_SETTINGS源碼:

#define CONFIG_EXTRA_ENV_SETTINGS\

      "loadaddr=0x80300000\0" \

      "rdaddr=0x81000000\0"\

      "console=ttyS2,115200n8\0" \

      "mpurate=1000\0" \

      "vram=12M\0" \

      "dvimode=1280x720MR-16@60\0" \

      "defaultdisplay=dvi\0" \

      "nandroot=ubi0:rootfs\0" \

      "nandrootfstype=ubifs\0" \

      "nandargs=setenv bootargsconsole=${console} rw mem=120M@0x80000000 mem=256M@0xA0000000 " \

             "mpurate=${mpurate} " \

             "vram=${vram} " \

             "ip=192.168.1.188:192.168.1.252:192.168.1.1:255.255.255.0:tgt:eth0:off"\

             "omapdss.def_disp=${defaultdisplay}" \

             "omapfb.mode=dvi:${dvimode}" \

             "ubi.mtd=4 "\

             "root=${nandroot} " \

             "rootfstype=${nandrootfstype}" \

             "init=/initandroidboot.console=ttyS2\0" \

      "nfstvargs=setenv bootargsconsole=ttyS2,115200n8 rw mem=120M@0x80000000 mem=256M@0xA0000000 mpurate=1000vram=12M omapfb.mode=tv:720x576@25 omapdss.def_disp=tvip=192.168.1.188:192.168.1.252:192.168.1.1:255.255.255.0:tgt:eth0:offroot=/dev/nfsnfsroot=192.168.1.252:/home/davinci/dm3730/dvsdk4_03/filesystem/dm3730rootfs,nolock\0"\

      "nfslcdargs=setenv bootargsconsole=ttyS2,115200n8 rw mem=120M@0x80000000 mem=256M@0xA0000000 mpurate=1000vram=12M omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay}init=/init androidboot.console=ttyS2ip=192.168.1.188:192.168.1.252:192.168.1.1:255.255.255.0:tgt:eth0:offroot=/dev/nfsnfsroot=192.168.1.252:/home/davinci/dm3730/dvsdk4_03/filesystem/dm3730rootfs,nolock\0"\

      "tftpboot=tftp 80300000dm3730_kernel.bin; bootm 80300000\0" \

      "userboot=nand read ${loadaddr}200000 400000; bootm ${loadaddr}\0" \

      "erase_env=nand erase 4000040000\0" \

      "eraseall=nand erase\0" \

      "updatexload=tftp 80300000dm3730_xload.bin;nand erase 0 40000;nandecc hw;nand write.i 80300000 0${filesize}\0" \

      "updateuboot=tftp 80300000dm3730_uboot.bin;nand erase 80000 180000;nandecc sw;nand write.i 80300000 80000${filesize}\0" \

      "updatekernel=tftp 80300000dm3730_kernel.bin;nand erase 200000 500000;nandecc sw;nand write.i 80300000200000 ${filesize}\0" \

      "updaterootfs=tftp 81000000dm3730_ubifs.bin;nand erase C00000 7800000;nandecc sw;nand write.i 81000000C00000 ${filesize}\0" \

      "nandboot=echo Booting from nand...; " \

             "run nandargs; " \

             "nand read ${loadaddr} 200000400000; " \

             "bootm ${loadaddr}\0" \

      "nfstvboot=echo Booting from nfs...; " \

             "run nfstvargs; " \

             "nand read ${loadaddr} 200000400000; " \

             "bootm ${loadaddr}\0" \

      "nfslcdboot=echo Booting from nfs...; " \

             "run nfslcdargs; " \

             "nand read ${loadaddr} 200000400000; " \

             "bootm ${loadaddr}\0" \

      " fact_update =nand erase;mmc init;"\

            "fatloadmmc 0 80300000 dm3730_xload.bin;nandecc hw;nand write.i 80300000 0 ${filesize};"\

            "fatloadmmc 0 80300000 dm3730_uboot.bin;nandecc sw;nand write.i 80300000 80000${filesize}; "\

            "fatloadmmc 0 80300000 dm3730_kernel.bin;nandecc sw;nand write.i 80300000 200000${filesize}; "\

            "fatloadmmc 0 81000000 dm3730_ubifs.bin;nandecc sw;nand write.i 81000000 C00000${filesize};"


注意:上面源碼格式很講究,特別是( \   「」   \0  ;  $)等標點符號,mpurate=1000表示跑1GA8;自從咱們的linux-2.6.32支持ubifs 文件系統後,咱們不再用所謂的JFFS2YAFFS2了。咱們公司支持512M 的內存並且CS0片選信號指向0x80000000(前段),第2段的片選信號CS1指向0xA0000000(後段)。爲何這樣分配呢?前面120M和後面256M都是給LINUX系統的,而前段256M-120M=136M是給DSP用的,固然DSP裏邊還包括CMEM共享內存。這前段256M的內存分配是動態的,你能夠分配80MLINUX,那麼DSPCMEM就可分配更多的空間了。至於DSP裏邊如何細分,和應用程序使用的loadmodule.sh這個文件如何配合,這裏不重點論述,那是在之後的內核移植再說。還有,有些其餘開發板公司的內存若是隻有256M字節,那麼mem=256M@0xA0000000必須去掉,不然內核根本起不來。


上面有不少BOOT方式,好比nandboot,nfstvboot, tftpboot,咱們直接使用run tftpboot就能夠經過網絡動態下載TFTPSERVER裏邊的dm3730_kernel.bin,而後使用默認的bootargs UBOOT參數進行NFS調試,或者run nfstvboot,也能夠NFSrun nfstvboot表示視頻輸出是TV輸出,這個和內核有關,之後內核移植有個地方有選擇的編譯;run nfslcdboot表示從LCD接口輸出視頻,能夠跑android安卓文件系統。


有時客戶在uboot命令行對bootargs進行設置,使用到這個剛設置好的bootargs,能夠經過使用上面的userboot進行啓動。

set bootcmd 「run userboot」

saveern

一樣使用nandboot也可使用setbootcmd 「run nandboot」saveenv的命令實現。


在測試的時候,咱們和主機TFTP配合,直接經過run updatexload去網絡升級xlaodrun updateuboot去升級燒寫ubootrun updatekernel去燒寫內核,固然了,你的tftpboot目錄下要有對應的BIN文件,這裏就很少說了,之前的DM6446DM36X開發攻略都提示過。



繼續往下看代碼:

#defineCONFIG_BOOTCOMMAND "run nandboot"

#defineCONFIG_BOOTARGS \

"console=ttyS2,115200n8rw mem=120M@0x80000000 mem=256M@0xA0000000 mpurate=1000 vram=12Momapfb.mode=dvi:1280x720@60 omapdss.def_disp=lcdip=192.168.1.188:192.168.1.252:192.168.1.1:255.255.255.0:tgt:eth0:offroot=/dev/nfsnfsroot=192.168.1.252:/home/davinci/dm3730/dvsdk4_03/filesystem/dm3730rootfs,nolock"

這個是默認的bootargs的參數,默認使用nandboot


   U-BOOT保存在NAND FLASH的參數,能夠在U-BOOT命令行使用pri命令或pritenv命令看看。


最後面在#if defined(CONFIG_CMD_NET)的後面加上:

/* DM9000 */

#defineCONFIG_NET_MULTI                1

#defineCONFIG_NET_RETRY_COUNT          20

#defineCONFIG_DRIVER_DM9000            1

#defineCONFIG_DM9000_BASE              0x2c000000

#defineDM9000_IO                      CONFIG_DM9000_BASE

#defineDM9000_DATA                    (CONFIG_DM9000_BASE + 0x400)

#defineCONFIG_DM9000_USE_16BIT         1

#defineCONFIG_DM9000_NO_SROM           1

#undef  CONFIG_DM9000_DEBUG


#defineCONFIG_ETHADDR          88:11:22:33:44:77

#defineCONFIG_IPADDR           192.168.1.188

#defineCONFIG_SERVERIP         192.168.1.252

#defineCONFIG_GATEWAYIP        192.168.1.1

#defineCONFIG_NETMASK          255.255.255.0

咱們本身修改的UBOOT和內核可以把MAC ETHADDR)地址傳給內核;

這個MAC正規的申請途徑能夠GOOGLE一下,而測試調試能夠隨便定義;

板子的靜態IP是定義192.168.1.188,而服務器主機的地址是192.168.1.252,不一樣公司有不一樣公司的網段和IP地址,用戶能夠修改。

好了,omap3_evm.h已經修改完畢。

2、修改u-boot-2010.06\arch\arm\cpu\arm_cortexa8\omap3\

這裏邊沒什麼好改動的,估計要改動的就是lowlevel_init.S,去配不一樣的PLL,這個參考手冊見sprugn4q.pdf。而後就是注意修改mem.c裏邊的gpmc_init()的BOOT模式,到底內核是從MMC讀仍是從NAND讀到內存。


3、修改u-boot-2010.06\board\ti\evm\

這裏邊的Evm.hEvm.c就是對DM3730管腳複用配置再次進行處理,在上篇《DAVINCI DM3730開發攻略——xload-1.51移植》也提到過,DM3730管腳複用比較複雜,有7種不一樣的模式,m0~m7,在evm.h代碼裏邊:

/*

* IEN  -Input Enable

* IDIS - Input Disable

* PTD  -Pull type Down

* PTU  -Pull type Up

* DIS  -Pull type selection is inactive

* EN   -Pull type selection is active

* M0   -Mode 0

* The commented string gives the final muxconfiguration for that pin

*/

#define MUX_EVM()\

這個就說明了你使用的某個管腳是M0默認模式,仍是M4GPIO模式,而GPIO模式是使用IEN(輸入)仍是IDIS(輸出 ),GPIO管腳上拉PTU仍是下拉PTD,上拉下拉是否要使能DISEN

MUX_VAL這種格式宏定義在u-boot-2010.06\arch\arm\include\asm\arch-omap3\mux.h定義,指向對應的寄存器。


舉個例子:

好比I2C3,DM3730一共有4I2C總線,咱們板子只須要I2C1I2C2兩個總線就夠用了,那麼多餘的I2C3I2C4能夠看成GPIO使用。


      MUX_VAL(CP(I2C3_SCL),         (IEN | PTU | EN  | M0)) /*I2C3_SCL*/\

      MUX_VAL(CP(I2C3_SDA),        (IEN | PTU | EN  | M0)) /*I2C3_SDA*/\


若是是這樣的代碼,表示你使用I2C3使用M0模式,那這兩個管腳使用I2C的模式,而不是GPIO

      MUX_VAL(CP(I2C3_SCL),         (IEN | PTU | EN  | M4)) /*GPIO184*/\

      MUX_VAL(CP(I2C3_SDA),        (IEN | PTU | EN  | M4)) /*GPIO185*/\

這樣的代碼表示I2C3被用來作GPIOIEN表示用做輸入,內部上拉電阻,並且上拉電阻使能,

MUX_VAL(CP(I2C3_SCL),        (IDIS | PTU | EN  | M4)) /*GPIO184*/\

      MUX_VAL(CP(I2C3_SDA),        (IDIS | PTU | EN  | M4)) /*GPIO185*/\

這樣的代碼表示I2C3被用來作GPIOIEN表示用做輸出,內部上拉電阻,並且上拉電阻使能。

其實也很好理解。咱們在UBOOT詳細定義了管腳複用,那麼之後在內核編譯的時候,首先內核make menuconfig裏邊要去掉MUX這個選項,這樣內核就不必再作一次管腳配置了。


寫到這,對DM3730 UBOOT的移植應該有個頭緒了,具體的應用,一些BUG,須要具體問題具體分析,不一樣的網口芯片,不一樣的NANDDDR芯片有不一樣的驅動,這裏就很少說了。U-BOOT的移植在ARM平臺來講,大同小異,雖然一個是ARM926,一個是A8,或者A9A12A15,但對於軟件工程師來講,若是不涉及到彙編代碼的編寫,其實都是同樣的C語言,同樣的UBOOT軟件架構。UBOOT的目的無外乎就是把linux內核給跑起來,把一些參數傳給內核,板子啓動的時候作些初始化的工做,或者一些測試調試工做。真正體現產品的功能價值就是內核和對應的應用程序。



(聲明:

   桐燁科技DM3730/DM6446的板子和其餘公司的開發板不同,特別是DM3730的板子,目前國內好多家公司都只提供ARM(CORTEX-A8)的應用例子,不多介紹如何添加客戶本身的算法到DSP端的例子,有些須要作DSP算法的人貪便宜,結果買這些便宜的板子回去花大量時間來學習,遲遲搞不清楚整個架構,浪費的這些時間難道不是資金嗎?咱們桐燁科技的板子都幫你採集好YUV格式的視頻圖像,並教會你如何把這個原始的圖像數據放到DSP端進行處理,而後再教會你如何傳處理過的圖像數據和參數到ARM端。同時提醒客戶還要注意一些冒牌的公司,特別是杭州有家沒道德的公司直接拿咱們桐燁科技的DM3730開發板圖片放到他們公司網站上,欺騙其餘人,咱們桐燁科技歷來沒有想到讓其餘公司作代理。

相關文章
相關標籤/搜索