Jump to content

    

shamrel

Свой
  • Content Count

    157
  • Joined

  • Last visited

Posts posted by shamrel


  1. перед тем, как ubi-аттачить смотрите в лог ядра - есть ли опознание нанда и появление /dev/mtd..

    и сначала ubiformat, потом ubiattach.. только потом достаточно ubiattach

     

    В том то и дело, что нет устройства в системе.

    После загрузки:

    root@am33:~# dmesg | grep NAND

    [ 32.545592] jffs2: version 2.2. (NAND) (SUMMARY) © 2001-2006 Red Hat, Inc.

    [ 33.636919] OneNAND driver initializing

    root@am33:~# cat /proc/mtd

    dev: size erasesize name

    root@am33:~#

     

    Причем память жива. в u-boot она есть, в нее можно писать и читать.

     

     

  2. Доброго Здоровья!

    Имеется устройства на основе Beaglebone Black (BBB).

    На плату добавлена NAND память MT29F2G08ABAEAH4. Схема включения в приложении.

    nand.PDF

    В настоящий момент система грузиться с SD карты. Однако, хочется грузиться с NAND.

    Для этого считаю нужным добавить в файлы "Device Tree", описывающие платформу, информацию о NAND.

    При добавлении руководствовался информацией: PATCH. Philip Avinash.

    В результате чего,в файл am335x-bone-common.dtsi добавил:

    am33xx_pinmux: pinmux@44e10800 {
    	pinctrl-names = "default";
    	pinctrl-0 = <&nandflash_pins_s0>;
    
    	...
    
    	nandflash_pins_s0: nandflash_pins_s0 {
                           pinctrl-single,pins = <
                                0x0 0x30        /* gpmc_ad0.gpmc_ad0, INPUT | PULLUP | MODE0 */
                                0x4 0x30        /* gpmc_ad1.gpmc_ad1, INPUT | PULLUP | MODE0 */
                                0x8 0x30        /* gpmc_ad2.gpmc_ad2, INPUT | PULLUP | MODE0 */
                                0xc 0x30        /* gpmc_ad3.gpmc_ad3, INPUT | PULLUP | MODE0 */
                                0x10 0x30        /* gpmc_ad4.gpmc_ad4, INPUT | PULLUP | MODE0 */
                                0x14 0x30        /* gpmc_ad5.gpmc_ad5, INPUT | PULLUP | MODE0 */
                                0x18 0x30        /* gpmc_ad6.gpmc_ad6, INPUT | PULLUP | MODE0 */
                                0x1c 0x30        /* gpmc_ad7.gpmc_ad7, INPUT | PULLUP | MODE0 */
                                0x70 0x30        /* gpmc_wait0.gpmc_wait0, INPUT | PULLUP | MODE0 */
                                0x74 0x37        /* gpmc_wpn.gpio0_30, INPUT | PULLUP | MODE7 */
                                0x7c 0x8        /* gpmc_csn0.gpmc_csn0,  PULL DISA */
                                0x90 0x8        /* gpmc_advn_ale.gpmc_advn_ale, PULL DISA */
                                0x94 0x8        /* gpmc_oen_ren.gpmc_oen_ren, PULL DISA */
                                0x98 0x8        /* gpmc_wen.gpmc_wen, PULL DISA */
                                0x9c 0x8        /* gpmc_be0n_cle.gpmc_be0n_cle, PULL DISA */
                    >;
                   };
    };
    
    
    ocp: ocp {
    
                  ...
    
    	elm: elm@48080000 {
    		status = "okay";
    	};
    
    	gpmc: gpmc@50000000 {
                           status = "okay";
                           ranges = <0 0 0x08000000 0x10000000>;        /* CS0: NAND */
    		/*compatible = "ti,am3352-gpms";    ??????  */
    		ti,hwmods = "gpms";
                           nand@0,0 {
                                   reg = <0 0 0>; /* CS0, offset 0 */
                                   nand-bus-width = <8>;
                                   ti,nand-ecc-opt = "bch8";
    
                                   gpmc,sync-clk = <0>;
                                   gpmc,cs-on = <0>;
                                   gpmc,cs-rd-off = <44>;
                                   gpmc,cs-wr-off = <44>;
                                   gpmc,adv-on = <6>;
                                   gpmc,adv-rd-off = <34>;
                                   gpmc,adv-wr-off = <44>;
                                   gpmc,we-off = <40>;
                                   gpmc,oe-off = <54>;
                                   gpmc,access = <64>;
                                   gpmc,rd-cycle = <82>;
                                   gpmc,wr-cycle = <82>;
                                   gpmc,wr-access = <40>;
                                   gpmc,wr-data-mux-bus = <0>;
    
                                   #address-cells = <1>;
                                   #size-cells = <1>;
                                   elm_id = <&elm>;
    
                                   /* MTD partition table */
                                   partition@0 {
                                           label = "SPL1";
                                           reg = <0x00000000 0x000020000>;
                                   };
    
                                   partition@1 {
                                           label = "SPL2";
                                           reg = <0x00020000 0x00020000>;
                                   };
    
                                   partition@2 {
                                           label = "SPL3";
                                           reg = <0x00040000 0x00020000>;
                                   };
    
                                   partition@3 {
                                           label = "SPL4";
                                           reg = <0x00060000 0x00020000>;
                                   };
    
                                   partition@4 {
                                           label = "U-boot";
                                           reg = <0x00080000 0x001e0000>;
                                   };
    
                                   partition@5 {
                                           label = "environment";
                                           reg = <0x00260000 0x00020000>;
                                   };
    
                                   partition@6 {
                                           label = "Kernel";
                                           reg = <0x00280000 0x00500000>;
                                   };
    
                                   partition@7 {
                                           label = "File-System";
                                           reg = <0x00780000 0x0F880000>;
                                   };
                           };
                   };
    
    };
    
    

     

    В файл am33xx.dtsi добавил:

    ocp {
       ....
                  gpmc: gpmc@50000000 {
    		compatible = "ti,am3352-gpmc";
    		ti,hwmods = "gpmc";
    		/*reg = <0x50000000 0x01000000>;*/
    		reg = <0x50000000 0x2000>;
    		interrupts = <100>;
                           gpmc,num-cs = <7>;
    		gpmc,num-cs = <8>;
    		gpmc,num-waitpins = <2>;
    		#address-cells = <2>;
    		#size-cells = <1>;
    
    		status = "disabled";
    	};
    
    	elm: elm@48080000 {
    		reg = <0x48080000 0x2000>;
    		interrupts = <4>;
    		/*compatible = "ti,am3352-elm";*/
    		ti,hwmods = "elm";
    		status = "disabled";
    	};
    
    }
    

    Также в этом файле пришлось отключить(закоментировал) mmc2 и mmc3. Иначе при попытке смуксить пины на NAND

    ядро паниковало.

     

    В настройках ядра включено все, что связано с NAND и присущему ему файловыми системами.

    В системе появилось устройство /dev/ubi_ctrl, однако при попытки приатачить его получаю ошибку:

     

    root@am33:~# ubiattach /dev/ubi_ctrl -m 2

    ubiattach: error!: cannot attach mtd2

    error 19 (No such device)

     

    У кого есть соответствующий опыт, помогите.

    Как включить NAND?

     

    P.S.: Уважаемые модераторы, может быть имеет смысл слить с темой "DS1338. AM33xx. Linux-3.8.13. Device Tree." ?

     

  3. Спасибо! Заработало! :biggrin:

     

    Ткнёте носом, где можно почитать про "cape manager"? Что такое слоты, фрагменты, cape. Не могу понять.

    Есть в дереве девайсов большой узел:


    bone_capemgr {
    compatible = "ti,bone-capemgr";
    status = "okay";

    eeprom = <&baseboard_eeprom>;

    baseboardmaps {
    baseboard_beaglebone: board@0 {
    board-name = "A335BONE";
    compatible-name = "ti,beaglebone";
    };

    baseboard_beaglebone_black: board@1 {
    board-name = "A335BNLT";
    compatible-name = "ti,beaglebone-black";
    };
    };

    slots {
    slot@0 {
    eeprom = <&cape_eeprom0>;
    };

    slot@1 {
    eeprom = <&cape_eeprom1>;
    };

    slot@2 {
    eeprom = <&cape_eeprom2>;
    };

    slot@3 {
    eeprom = <&cape_eeprom3>;
    };

    /* geiger cape version A0 without an EEPROM */
    slot@5 {
    ti,cape-override;
    compatible = "kernel-command-line", "runtime";
    board-name = "Bone-Geiger";
    version = "00A0";
    manufacturer = "Geiger Inc.";
    part-number = "BB-BONE-GEIGER";
    };

    /* Nixie cape version A0 without an EEPROM */
    slot@7 {
    ti,cape-override;
    compatible = "kernel-command-line", "runtime";
    board-name = "Bone-Nixie";
    version = "00A0";
    manufacturer = "Ranostay Industries";
    part-number = "BB-BONE-NIXIE";
    };

    /* adafruit 1.8" TFT prototype cape */
    slot@8 {
    ti,cape-override;
    compatible = "kernel-command-line", "runtime";
    board-name = "Bone-TFT";
    version = "00A0";
    manufacturer = "Adafruit";
    part-number = "BB-BONE-TFT-01";
    };

    /* adafruit RTC DS1307 prototype cape */
    slot@9 {
    ti,cape-override;
    compatible = "kernel-command-line", "runtime";
    board-name = "Bone-RTC";
    version = "00A0";
    manufacturer = "Adafruit";
    part-number = "BB-BONE-RTC-01";
    };

    slot@10 {
    ti,cape-override;
    compatible = "kernel-command-line", "runtime";
    board-name = "Bone-Hexy";
    version = "00A0";
    manufacturer = "Koen Kooi";
    part-number = "BB-BONE-HEXY-01";
    };
    /* MRF24J40 Cape Override */
    slot@11 {
    ti,cape-override;
    compatible = "kernel-command-line", "runtime";
    board-name = "Bone-MRF24J40";
    version = "00A0";
    manufacturer = "Signal 11 Software";
    part-number = "BB-BONE-MRF24J40";
    };

    /* RS232 cape */
    slot@12 {
    ti,cape-override;
    compatible = "kernel-command-line", "runtime";
    board-name = "BB-BONE-RS232";
    version = "00A0";
    manufacturer = "Adafruit";
    part-number = "BB-BONE-RS232-01";
    };

    /* GPS cape */
    slot@13 {
    compatible = "kernel-command-line", "runtime";
    board-name = "BB-BONE-GPS";
    version = "00A0";
    manufacturer = "Adafruit";
    part-number = "BB-BONE-GPS-01";
    };

    /* Beaglebone black has it soldered on */
    slot@100 {
    ti,cape-override;
    priority = <1>;
    compatible = "ti,beaglebone-black";
    board-name = "Bone-LT-eMMC-2G";
    version = "00A0";
    manufacturer = "Texas Instruments";
    part-number = "BB-BONE-EMMC-2G";
    };

    /* Beaglebone black has it soldered on */
    slot@101 {
    ti,cape-override;
    priority = <1>;
    compatible = "ti,beaglebone-black";
    board-name = "Bone-Black-HDMI";
    version = "00A0";
    manufacturer = "Texas Instruments";
    part-number = "BB-BONELT-HDMI";
    };

    /* Beaglebone black has it soldered on (but no audio) */
    slot@102 {
    ti,cape-override;
    priority = <2>;
    compatible = "ti,beaglebone-black";
    board-name = "Bone-Black-HDMIN";
    version = "00A0";
    manufacturer = "Texas Instruments";
    part-number = "BB-BONELT-HDMIN";
    };

    };

    /* mapping between board names and dtb objects */
    capemaps {
    /* DVI cape */
    cape@0 {
    /* board-name = "BeagleBone DVI-D CAPE"; */
    part-number = "BB-BONE-DVID-01";
    version@00A0 {
    version = "00A0";
    dtbo = "cape-bone-dvi-00A0.dtbo";
    };
    version@00A1 {
    version = "00A1", "01";
    dtbo = "cape-bone-dvi-00A1.dtbo";
    };
    version@00A2 {
    version = "00A2", "A2";
    dtbo = "cape-bone-dvi-00A2.dtbo";
    };
    version@00A3 {
    version = "00A3";
    dtbo = "cape-bone-dvi-00A2.dtbo";
    };
    };

    /* beaglebone black emmc on board */
    cape@1 {
    /* board-name = "BeagleBone 2G eMMC1 CAPE"; */
    part-number = "BB-BONE-EMMC-2G";
    version@00A0 {
    version = "00A0";
    dtbo = "cape-bone-2g-emmc1.dtbo";
    };
    };

    /* geiger cape */
    cape@2 {
    part-number = "BB-BONE-GEIGER";
    version@00A0 {
    version = "00A0";
    dtbo = "cape-bone-geiger-00A0.dtbo";
    };
    };

    /* LCD3 cape */
    cape@3 {
    part-number = "BB-BONE-LCD3-01";
    version@00A0 {
    version = "00A0";
    dtbo = "cape-bone-lcd3-00A0.dtbo";
    };
    version@00A2 {
    version = "00A2";
    dtbo = "cape-bone-lcd3-00A2.dtbo";
    };
    };

    /* Weather cape */
    cape@4 {
    part-number = "BB-BONE-WTHR-01";
    version@00A0 {
    version = "00A0";
    dtbo = "cape-bone-weather-00A0.dtbo";
    };
    };

    /* beaglebone black hdmi on board */
    cape@5 {
    part-number = "BB-BONELT-HDMI";
    version@00A0 {
    version = "00A0";
    dtbo = "cape-boneblack-hdmi-00A0.dtbo";
    };
    };

    /* nixie cape */
    cape@6 {
    part-number = "BB-BONE-NIXIE";
    version@00A0 {
    version = "00A0";
    dtbo = "cape-bone-nixie-00A0.dtbo";
    };
    };
    cape@7 {
    part-number = "BB-BONE-TFT-01";
    version@00A0 {
    version = "00A0";
    dtbo = "cape-bone-adafruit-lcd-00A0.dtbo";
    };
    };

    cape@8 {
    part-number = "BB-BONE-RTC-01";
    version@00A0 {
    version = "00A0";
    dtbo = "BB-BONE-RTC-00A0.dtbo";
    };
    };

    cape@9 {
    part-number = "BB-BONE-HEXY-01";
    version@00A0 {
    version = "00A0";
    dtbo = "cape-bone-hexy-00A0.dtbo";
    };
    };
    /* mrf24j40 cape */
    cape@10 {
    part-number = "BB-BONE-MRF24J40";
    version@00A0 {
    version = "00A0";
    dtbo = "cape-bone-mrf24j40-00A0.dtbo";
    };
    };
    /* expansion test */
    cape@11 {
    part-number = "BB-BONE-EXPTEST";
    version@00A0 {
    version = "00A0";
    dtbo = "cape-bone-exptest-00A0.dtbo";
    };
    };
    cape@12 {
    part-number = "BB-BONE-RS232-01";
    version@00A0 {
    version = "00A0";
    dtbo = "BB-BONE-RS232-00A0.dtbo";
    };
    };

    cape@13 {
    part-number = "BB-BONE-GPS-01";
    version@00A0 {
    version = "00A0";
    dtbo = "BB-BONE-GPS-00A0.dtbo";
    };
    };


    /* beaglebone black hdmi on board (No audio) */
    cape@14 {
    part-number = "BB-BONELT-HDMIN";
    version@00A0 {
    version = "00A0";
    dtbo = "cape-boneblack-hdmin-00A0.dtbo";
    };
    };

    /* remain backwards compatible with old EEPROM */
    cape@15 {
    part-number = "2191";
    version@R2 {
    version = "R2";
    dtbo = "cape-bebopr-R2.dtbo";
    };
    };

    };
    };

    
    

     

    Как с ним работать? Что это?

  4. Доброго Здоровья!

    Имеется устройства на основе Beaglebone Black (BBB), на линию i2c0 установлены часы DS1338. В конфигурации ядра опция "Dallas/Maxim DS1307/37/38/39/40, ST M41T00" активирована.

    В файле am335x-boneblack.dts добавил устройство DS1338 :

     

    am33xx_pinmux: pinmux@44e10800 {
    	pinctrl-names = "default";
    	pinctrl-0 = <&userled_pins>;
    
                   .....
    	i2c0_pins: pinmux_i2c0_pins {
    		pinctrl-single,pins = <
    			0x188 0x70 	/* i2c0_sda, SLEWCTRL_SLOW | INPUT_PULLUP | MODE0 */
    			0x18c 0x70	/* i2c0_scl, SLEWCTRL_SLOW | INPUT_PULLUP | MODE0 */
    		>;
    	};
    	....
    };
    
    &i2c0 {
    status = "okay";
    clock-frequency = <400000>;
    pinctrl-names = "default";
    pinctrl-0 = <&i2c0_pins>;
    
    tps: tps@24 {
    	reg = <0x24>;
    };
    
    baseboard_eeprom: baseboard_eeprom@50 {
    	compatible = "at,24c256";
    	reg = <0x50>;
    };
    /* добавил я: */
    ds1338: rtc@68 {
    	compatible = "mxim,ds1338,ds1339";
    	reg = <0x68>;
    };
    };
    
    

    В сопутствующем файле am33xx.dtsi в разделе ocp {} имеется:

    i2c0: i2c@44e0b000 {
    		compatible = "ti,omap4-i2c";
    		#address-cells = <1>;
    		#size-cells = <0>;
    		ti,hwmods = "i2c1";	/* TODO: Fix hwmod */
    		reg = <0x44e0b000 0x1000>;
    		interrupts = <70>;
    		status = "disabled";
    	};
    

     

    В результате часы не работают, в системе не добавляется новое устройство /dev/rtc1 (rtc0 -- есть, это чиповые часы).

    Что еще нужно сделать, для того, что бы использовать часы реального времени DS1338 в Linux?

    На шине i2c еще висит TPS65217. Он вроде как работает. Осциллограф на линии сигналы видит.

  5. Доброго здоровья!

    Вопрос по разводке многоканальных схем! Как вывести линии через порты из группы Sheet symbol понятно (спасибо Алексею Сабунину, часть 6). А как быть, если следует вывести шину? Шину из шин слепит не выходит.

  6. vicnic, спасибо!

    А как учитывать добавочную толщину меди в результате металлизации? И потом, в результате металлизации разве не изменится ширина дорожки?

    Я думал, что при металлизации отверстий всю остальную топологию прячут.

    Другими словами, каким образом выбирать толщину меди на внешнем слое для расчета импедансов?

    Как быть с диэлектрической постоянной? Каких я только значений не встречал, и 4.05, и 4.3, и 4.5, и 4.6. Я понимаю, что все это должно зависеть от частоты, но как быть-то при расчетах?

     

    P.S.: Поделитесь Polar Instruments Si9000 :rolleyes:

  7. Доброго Здоровья!

    Требуется на основе печатной платы готового устройства изготовить свой прибор. Помогите разобраться со стеком (см приложение).

    post-31229-1380795043_thumb.png

    Проблемы в следующем, судя по стеку толщина фольги на верхнем слое t=2,4 mil (60.96 мкм), ширина диэлектрика под этим слоем h = 3,6 mil (91.44 мкм); при таких данных для в примере дифференциальные линии имеют ширину w = 3,75 mil (95.25 мкм), зазор -- 7,2 mil (182.88 мкм). То-есть, толщина дорожки всего лишь в полтора раза меньше её ширины! Это технически выполнимо? Как обстоит дело с протравами? Как вычислять импеданс линии, когда w/h = 1.56?

    Allegro Cadence посчитал дифференциальное сопротивление 92,8 Ом, Saturn PCB Design -- 90.8 Ом, TxLine -- 115.9 Ом. Все бы ничего, можно было бы объявить TxLine ущербным, если бы по документации на чипы рекомендуемое сопротивление для этих линий не должно было бы быть 120 Ом (допускаю, что криво понял документацию. диф.линии от DDR3L ).

    Возможно ли вообще изготовить печатную плату с таким стеком, или лучше перейти на толщину меди 0.5oz и все пересчитать?

    Помогите разобраться!

  8. Хочу вокруг проводника проложить землю.

    Имеет ли Алтиум вспомогательные команды или инструменты?

    Создаете проводник, а вокруг вставляете "Poligon Pour", который соединяете в настройках с требуемой сетью (Connect to Net), в вашем случае скорее всего, с сетью "GND". Однако для обеспечения зазоров нужной величины между проводником и полигоном придется создавать соответствующее правило.

  9. Ура! Появился /dev/spidev1.0 !

    Итого:

    /* Module pin mux for SPI */
    static struct pinmux_config spi1_pin_mux[] = {
    {"mcasp0_aclkx.spi1_sclk", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
    	| AM33XX_INPUT_EN},
    {"mcasp0_fsx.spi1_d0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
    	| AM33XX_PULL_UP | AM33XX_INPUT_EN},
    {"mcasp0_axr0.spi1_d1", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
    	| AM33XX_INPUT_EN},
    {"mcasp0_ahclkr.spi1_cs0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
    	| AM33XX_PULL_UP | AM33XX_INPUT_EN},
    {NULL, 0},
    };
    
    static struct spi_board_info am335x_spi1_master_info[] = {
    
    {
    	.modalias	= "spidev",	
    	.chip_select	= 1,
    	.max_speed_hz	= 6 * 1000 * 1000,
    	.mode 		= SPI_MODE_0,
    	.bus_num	= 0,
    }, 
    {
    	.modalias	= "spidev",	/* piggyback  A2 */
    	.chip_select	= 0,
    	.max_speed_hz	= 6 * 1000 * 1000,
    	.mode 		= SPI_MODE_0,
    	.bus_num	= 1,
    },
    };	
    
    static struct platform_device am335x_spi1t = {
    .name           = "spi1_custom",
    .id             = 1,
    };
    
    /* setup spi1 */
    static void spi1_init(void)
    {
    int ret;
     	printk("SPI1: init");
    setup_pin_mux(spi1_pin_mux);
    ret = spi_register_board_info(am335x_spi1_master_info,
    		ARRAY_SIZE(am335x_spi1_master_info));
    printk("spi_register_board_info: %d \n", ret);
    //	ret = platform_device_register(&am335x_spi1t);
    //		if (ret)
    //		pr_err("  failed to register SPI1\n");
    return;
    }
    

    alx2, Спасибо огромное и низкий поклон!

    Перехожу на следующий уровень бесконечной игры под названием Embedded Linux. :)

     

  10. Спасибо. Изменил platform_device .id на 1.

    initspi_register_board_info возвращает 0.

    В /sys/devices/platform есть устройство spi1_custom.1:

    root@var-som-am33:~# ls -l /sys/class/spi_master

    lrwxrwxrwx 1 root root 0 Jul 5 09:52 spi1 -> ../../devices/platform/omap/omap2_mcspi.1/spi_master/spi1

    lrwxrwxrwx 1 root root 0 Jul 5 09:52 spi2 -> ../../devices/platform/omap/omap2_mcspi.2/spi_master/spi2

     

    root@var-som-am33:~# ls -l /sys/devices/platform

    drwxr-xr-x 3 root root 0 Jul 5 09:52 alarmtimer

    drwxr-xr-x 3 root root 0 Jul 5 09:52 cpuidle-am33xx.0

    drwxr-xr-x 4 root root 0 Jul 5 09:52 leds-gpio

    drwxr-xr-x 3 root root 0 Jul 5 09:52 nop_usb_xceiv.0

    drwxr-xr-x 3 root root 0 Jul 5 09:52 nop_usb_xceiv.1

    drwxr-xr-x 39 root root 0 Jul 5 09:52 omap

    drwxr-xr-x 3 root root 0 Jul 5 09:52 omap2-nand.0

    drwxr-xr-x 2 root root 0 Jul 5 09:56 power

    drwxr-xr-x 3 root root 0 Jul 5 09:52 pruss_uio

    drwxr-xr-x 4 root root 0 Jul 5 09:52 pwm-backlight

    drwxr-xr-x 3 root root 0 Jul 5 09:52 reg-dummy

    drwxr-xr-x 3 root root 0 Jul 5 09:52 regulatory.0

    drwxr-xr-x 3 root root 0 Jul 5 09:52 sgx

    drwxr-xr-x 3 root root 0 Jul 5 09:52 spi1_custom.1

    -rw-r--r-- 1 root root 4096 Jul 5 09:52 uevent

     

    Однако в /dev ничего SPI'йного не появилось. Директория /sys/class/spidev/ пуста (а там должно что-то быть?)

  11. Этого недостаточно. Надо еще создать структуру platform_device и зарегистрировать с помощью platform_device_register().

    Спасибо за ответ, но не помогло. Получился такой код:

    /* Module pin mux for SPI */
    static struct pinmux_config spi1_pin_mux[] = {
    {"mcasp0_aclkx.spi1_sclk", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
    	| AM33XX_INPUT_EN},
    {"mcasp0_fsx.spi1_d0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
    	| AM33XX_PULL_UP | AM33XX_INPUT_EN},
    {"mcasp0_axr0.spi1_d1", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
    	| AM33XX_INPUT_EN},
    {"mcasp0_ahclkr.spi1_cs0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
    	| AM33XX_PULL_UP | AM33XX_INPUT_EN},
    {NULL, 0},
    };
    
    static struct spi_board_info am335x_spi1_master_info[] = {
    {
    	.modalias	= "spidev",
    	.chip_select	= 2,
    	.max_speed_hz	= 6 * 1000 * 1000,
    	.mode 		= SPI_MODE_0,
    	.bus_num	= 1,
    },
    };	
    
    static struct platform_device am335x_spi1t = {
    .name           = "spi1_custom",
    .id             = -1,
    };
    
    /* setup spi1 */
    static void spi1_init(void)
    {
    int ret;
     	printk("SPI1: init");
    setup_pin_mux(spi1_pin_mux);
    spi_register_board_info(am335x_spi1_master_info,
    		ARRAY_SIZE(am335x_spi1_master_info));
    ret = platform_device_register(&am335x_spi1t);
    	if (ret)
    	pr_err("  failed to register SPI1\n");
    return;
    }

    При загрузке пишет "SPI1: init", "failed to register SPI1" не пишет.

    Что делать, куда смотреть?

  12. Доброго Здоровья!

    Стоит задача создать приложение, работающее с устройством, подключенным к процессору AM3354 через интерфейс SPI.

    Так как опыт работы с Linux сравнительно небольшой, было принято решение строить взаимодействие с железом через драйвер "spidev".

    По этому поводу на хабре наше две статьи:

    Обзор шины SPI и разработка драйвера ведомого SPI устройства для embedded Linux (Часть первая, обзорная)

    Обзор шины SPI и разработка драйвера ведомого SPI устройства для embedded Linux (Часть вторая, практическая)

     

    На первом шаге следует добиться появления в системе устройства /dev/spidevX.Y, для этого в настройках ядра добавляю:

    Device Drivers ---> SPI
    Device Drivers ---> SPI ---> Atmel SPI Controller
    Device Drivers ---> SPI ---> User mode SPI device driver support

    Затем в файле arch/arm/mach-omap2/board-am335xevm.c добавляю структуру:

    static struct spi_board_info am335x_spi1_master_info[] = {
        {
             .modalias    = "spidev",
            .chip_select    = 2,
            .max_speed_hz    = 6 * 1000 * 1000,
            .mode         = SPI_MODE_0,
            .bus_num    = 1,
        },
    };

    и "регистрирую эту структуру:

    static void spi1_init(int evm_id, int profile)
    {
        setup_pin_mux(spi1_pin_mux);
        spi_register_board_info(am335x_spi1_master_info,
                ARRAY_SIZE(am335x_spi1_master_info));
        return;
    }

     

    Пересобираем ядро, заливаем, загружаемся. В системе нет /dev/spidevX.Y. :(

    некоторый оптимизм внушает наличие: /sys/class/spi_master/ и /sys/class/spidev/, причем последняя директория пуста.

    root@var-som-am33:~# ls /sys/class/spi_master/
    spi1  spi2
    root@var-som-am33:~# ls /sys/class/spi_master/spi2
    device     power      subsystem  uevent

     

    Что может быть? Как получить устройство /dev/spidevX.Y? Складывается впечатление, что бутерброд не правильно ем, или лыжи не едут.

     

     

  13. Доброго здоровья!

    Осваиваю процессорный модуль VAR-SOM-AM33. Производитель рекомендует использовать linux arago и предоставляет два варианта файловой системы.

    первый вариант base-rootfs-var-som-am33.tar.bz2 (21.3М), второй вариант rootfs-var-som-am33.tar.bz2 (149М). Первый вариант --голая система, второй -- много лишнего. Для работы с пакетами производитель рекомендует менеджер пакетов dpkg. Как с помощью этого менеджера удалить пакет понятно, но как поставить новый? Вернее не так, как поставить в принципе, тоже понятно, не понятно где взять пакет?

    Может быть у кого есть опыт работы с этим менеджером?

     

    Изучил:

    http://processors.wiki.ti.com/index.php/AM...n/Customization

    http://arago-project.org/wiki/index.php/Building_with_Arago

    http://wiki.openwrt.org/doc/techref/opkg

  14. Спасибо за ответ!

    Проблему удалось решить с помощью модуля MTAX-SOM-AM335x, вернее его поддержки.

    В сопутствующих документах на это модуль нашлись:

    1. MLO

    2. u-boot.img

    3. u-boot-spl.bin

    4. uImage

    5. ramdisk

     

    В поставке от variscite файла u-boot-spl.bin не было.

    При загрузке модуля подсунул ему u-boot-spl.bin, затем u-boot.img, загрузился U-boot и определился NAND. Следующим шагом загрузил MLO-var-som-am33, прошил в NAND, затем загрузил uImage-var-som-am33, прошил в NAND. После рестарта системы U-boot загрузилась с NAND и все определилось.

    От тех поддержки variscite ответа я так и не получил.

    Сложилось впечатление, что u-boot-spl.bin и MLO -- одна суть, но разные формы. u-boot-spl.bin -- исполняемый файл, а MLO -- образ, включающий исполняемый файл. Может быть наоборот.

    Сейчас бодаюсь с зависающим при старте ядром, но это уже другая тема.

     

    P.S.: получил ответ от техподдержки:

    На модулях уже был предустановлен правильный U-Boot.

    Проверьте версию.

    Буду думать.

  15. поздравляю, половина дела сделана..

    в теории может нанд погореть - всякое бывает.. будем надеятся на лучшее..

    посмотрите в

    include/configs/конфиг-платы

    прописан ли там нанд, мало ли..

    мукс пинов вроде вот тут лежит

    board/ti/am335x/mux.c

    смотрите логику дефайнов и инита нужных веток подсистем АРМа

     

    исходников для som-var у меня нет, смотрю в юбутские 2012 от BeagleBone - поэтому могу где-то заблуждаться..

     

    секас с варисайтовским сомом у меня впереди - д.б. полный комплект исходников от производителя, иначе пойдут лесом..

    Спасибо за ответ!

    Проверил мукс ножек, ошибок не нашел.

    Вычитал файл конфигурации \include\configs\var_am335x.h, сравнил с am335x_evm.h, принципиальных различий в конкурировании NAND не нашел.

    Сам чип NAND скорее жив, чем мертв. Взял другую плату с предустановленным U-boot, если грузится с NAND, то NAND определяется (логично), если загружаю свой U-boot через UART, то "No NAND device found!!!".

    Вопрос остается открытым. Как получить рабочий U-boot?

     

    Еще помогите разобраться, в чем отличие файла MLO(36477байт) от u-boot-spl.bin (35927 байт). Спрашиваю, потому как в SDK от Variscite лежит помимо u-boot-var-som-am33.img еще файл MLO-var-som-am33. Через UART MLO запустить не удается. При компиляции U-boot получается и файл MLO, и файл u-boot-spl.bin.

     

    P.S.: написал в техподдержку Variscite, жду ответа.

  16. выставляете режим загрузки через УАРТ и подпихиваете бинарники через xmodem - сначала MLO, потом U-BOOT, потом из юбута размечаете НАНД и по сетке подтягиваете ядро и рутовую, которые заливаете в НАНД..

    Благодарю! Используя утилиту TeraTerm удалось залить SPL и U-boot. Однако возникла проблема, не определяется NAND:

    U-Boot 2011.09 (Jun 14 2013 - 11:42:14)

    I2C: ready

    DRAM: 256 MiB

    WARNING: Caches not enabled

    Varisciye AM33 SOM revision 1.1 detected

    NAND: HW ECC Hamming Code selected

    No NAND device found!!!

    0 MiB

    MMC: OMAP SD/MMC: 0

    Причем U-boot собирал из LSP packages, предоставленного фирмой изготовителя модуля, строго по инструкции и для обозначенной целевой платформы.

    На http://e2e.ti.com нашел аналогичную проблему, по видимому, проблемам в PIN mux. Другими словами, на ножки процессора, ответственные за работу с NAND назначены по умолчанию другие (альтернативные) функции. А вот где в исходника U-boot настраивается PIN mux я найти не могу. Нужна помощь.

  17. Доброго здоровья!

    Существует ли способ залить U-Boot в чистую NAND, используя UART и не имея SD карты? Процессор AM3354 в составе VAR-SOM-AM33.

    По глупости душевной через U-Boot стер NAND, сижу оплакиваю труп.

    Каким образом первоначально в NAND заливается U-boot?

  18. Доброго Здоровья!

    При создании УГО компонента мне необходимо, что бы при переносе в схему позиции параметров (Parameters) сохранялись. В свойствах параметров есть галочка Autoposition. Если галочка установлена, то при переносе компонента в схему, позиция параметров изменяется. Если же галочка снята, то в тексте( Value ) появляется жирная точка, как я понял точка привязки. Как можно избавится от этой точки и сохранить позицию параметра?

     

    post-31229-1368500451_thumb.png

    post-31229-1368500304_thumb.png