Перейти к содержанию
    

unreal_himan

Участник
  • Постов

    32
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о unreal_himan

  • Звание
    Участник
    Участник
  1. В том-то и дело, что надо при сборке выбрать нужные пункты в menuconfig. Прошивка u-boot, который идет с готовым образом на microsd, в spi флешку ругается что не умеет грузится по spl.
  2. У меня вот какая ситуация: Using username "root". ___ ____ _ _ _ _ ____ / _ \| _ \(_) | | (_) |_ ___ |___ \ | | | | |_) | | | | | | __/ _ \ __) | | |_| | __/| | | |___| | || __/ / __/ \___/|_| |_| |_____|_|\__\___| |_____| Welcome to Armbian 21.08.2 Focal with Linux 5.10.60-sunxi64 System load: 10% Up time: 2 min Memory usage: 26% of 985M IP: 192.168.137.2 CPU temp: 55°C Usage of /: 20% of 29G Last login: Mon Sep 27 16:05:53 2021 orangepilite2:~:# ls -l /dev/spi* crw------- 1 root root 153, 0 Sep 27 16:39 /dev/spidev0.0 orangepilite2:~:# lsmod | grep -i spi spidev 24576 0 orangepilite2:~:# flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=50000 flashrom v1.2 on Linux 5.10.60-sunxi64 (aarch64) flashrom is free software, get the source code at https://flashrom.org Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns). No EEPROM/flash device found. Note: flashrom can never write if the flash chip isn't found automatically. orangepilite2:/boot:# /boot/armbianEnv.txt [B---] 0 L:[ 1+12 13/ 13] *(298 / 298b) <EOF> [*][X] verbosity=1 bootlogo=false console=both disp_mode=1920x1080p60 overlay_prefix=sun50i-h6 rootdev=UUID=bd09b6e0-33f0-4eb9-b7dd-b94e1ed1e1de rootfstype=ext4 overlays=spi-spidev param_spidev_spi_bus=0 param_spidev_spi_cs=0 param_spidev_max_freq=2000000 usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u u-boot, который выложен выше выдает вот что и дальше не грузится U-Boot SPL 2021.10-rc4-00055-g8284d6f838 (Sep 27 2021 - 14:37:51 +0300)DRAM: 1024 MiBTrying to boot from sunxi SPI Сейчас все грузится с microsd карточки. Она далеко не вечная и хотелось бы иметь возможность грузится по сети и с USB флешки. Для этого как раз нужна эта флешка, она есть распаянная на некоторых платах
  3. Драйвер не видит стандартный spidev. Длинна уменьшена до 2.5см. Резистор поставлен. Ничего не изменилось. Подключено точно правильно, потому что начинает читать u-boot, если неправильно подключить, то ничего не происходит. могу дать удаленный доступ Так тоже попробовал, не работает. Еще варианты есть? есть большое подозрение, что проблема программная
  4. Флешка припаяна к маленькой платке со светодиодом, конденсатором и резистором. Завернул сначала в бумагу и фольгу сверху - без изменений.
  5. подключена к внешнему разъему ардуиновскими проводами длинной 10см
  6. флешка W25Q64FV. Подключена к spi0, cs к cs0. Но flashrom почему-то ее не видит через стандартный драйвер в armbian, видит через ch341 программатор
  7. U-Boot SPL 2021.10-rc4-00055-g8284d6f838 (Sep 27 2021 - 14:37:51 +0300) DRAM: 1024 MiB Trying to boot from sunxi SPI Уже лучше. Но дальше не идет.
  8. И меню с выбором носителя и этот пункт прописан в конфиге, все равно при загрузке u-boot ругается U-Boot SPL 2020.10-armbian+ (Sep 23 2021 - 14:27:18 +0300) DRAM: 1024 MiB SPL: Unsupported Boot Device! SPL: failed to boot from all boot devices ### ERROR ### Please RESET the board ###
  9. Здравствуйте форумчане. Имеется плата orange_pi_lite2 с allwinner_h6. Хочу сделать чтобы грузила u-boot с spi флешки с дальнейшим выбором носителя для загрузки, не получается собрать образ u-boot, чтобы он грузился и давал такой выбор. Есть гуру по настройкам u-boot?
  10. К сожалению чего-нибудь дельного найти не удалось для микроконтроллеров. Для fatfs есть реализация exfat (вроде как там есть выравнивание износа). Можно поковыряться здесь (есть работа с голой nand) https://github.com/atmelcorp/atmel-software-package
  11. atmel sam e70 + SD (EMMC)

    Здравствуйте, форумчане. Проблема с флешками. В качестве основы для проекта брал ASF от атмел для работы с SD/MMC, есть учебная плата SAM E70 XPLD с флешкой SDHC на 32 гб и кастомная плата с emmc того же объема и работают одинаково. Почему-то при записи/чтении получаются одинаковые данные по 512 байт. Причем повторяющиеся данные получаются и при односекторном режиме и мультисекторном. проекты Iar и atmel studio работают тоже одинаково. Может кто сталкивался с таким? Что я делаю не так?.Помогите пожалуйста Полный код во вложении #define blocks_8k_in_file 5730 // SD_MMC_BLOCK_SIZE #define SD_MMC_BLOCK_count 8192 / SD_MMC_BLOCK_SIZE // write_buffer COMPILER_ALIGNED(32) static uint8_t write_buf_pack_1[SD_MMC_BLOCK_count * SD_MMC_BLOCK_SIZE] = {0}; COMPILER_ALIGNED(32) static uint8_t write_buf_pack_2[SD_MMC_BLOCK_count * SD_MMC_BLOCK_SIZE] = {0}; int main(void) { uint8_t slot = 0; sd_mmc_err_t err; const usart_serial_options_t usart_serial_options = { .baudrate = CONF_TEST_BAUDRATE, .charlength = CONF_TEST_CHARLENGTH, .paritytype = CONF_TEST_PARITY, .stopbits = CONF_TEST_STOPBITS, }; irq_initialize_vectors(); cpu_irq_enable(); sysclk_init(); board_init(); stdio_serial_init(CONF_TEST_USART, &usart_serial_options); time_tick_init(); // Initialize SD MMC stack sd_mmc_init(); printf("\x0C\n\r-- SD/MMC/SDIO Card Example --\n\r"); printf("-- Compiled: %s %s --\n\r", __DATE__, __TIME__); while (1) { if (slot == sd_mmc_nb_slot()) { slot = 0; } printf("Please plug an SD, MMC or SDIO card in slot %d.\n\r", slot+1); // Wait for a card and ready do { err = sd_mmc_check(slot); if ((SD_MMC_ERR_NO_CARD != err) && (SD_MMC_INIT_ONGOING != err) && (SD_MMC_OK != err)) { printf("Card install FAILED\n\r"); printf("Please unplug and re-plug the card.\n\r"); while (SD_MMC_ERR_NO_CARD != sd_mmc_check(slot)) { } } } while (SD_MMC_OK != err); // Display basic card information main_display_info_card(slot); /* Test the card */ if (sd_mmc_get_type(slot) & CARD_TYPE_SDIO) { // Test CIA of SDIO card main_test_sdio(slot); } if (sd_mmc_get_type(slot) & (CARD_TYPE_SD | CARD_TYPE_MMC)) { // SD/MMC Card R/W main_test_memory(slot); } printf("Test finished, please unplugged the card.\n\r"); while (SD_MMC_OK == sd_mmc_check(slot)) { } slot++; } } /** * \brief Display basic information of the card. * \note This function should be called only after the card has been * initialized successfully. * * \param slot SD/MMC slot to test */ static void main_display_info_card(uint8_t slot) { printf("Card information:\n\r"); printf(" "); switch (sd_mmc_get_type(slot)) { case CARD_TYPE_SD | CARD_TYPE_HC: printf("SDHC"); break; case CARD_TYPE_SD: printf("SD"); break; case CARD_TYPE_MMC | CARD_TYPE_HC: printf("MMC High Density"); break; case CARD_TYPE_MMC: printf("MMC"); break; case CARD_TYPE_SDIO: printf("SDIO\n\r"); return; case CARD_TYPE_SD_COMBO: printf("SD COMBO"); break; case CARD_TYPE_UNKNOWN: default: printf("Unknow\n\r"); return; } printf("\n\r %d MB\n\r", (uint16_t)(sd_mmc_get_capacity(slot)/1024)); } uint8_t read_fram_file(uint16_t num_of_file, uint32_t num_of_page_file, uint8_t *buf_read) { uint32_t t_num_page = 0; t_num_page = (num_of_file-1)*blocks_8k_in_file+num_of_page_file; for (uint8_t i = 0;i<SD_MMC_BLOCK_count-1;i++) { if (SD_MMC_OK != sd_mmc_init_read_blocks(0, t_num_page+i, 1/*SD_MMC_BLOCK_count*/)) { printf("[FAIL]\n\r"); return 1; } if (SD_MMC_OK != sd_mmc_start_read_blocks(buf_read+i*512, 1/*SD_MMC_BLOCK_count*/)) { printf("[FAIL]\n\r"); return 1; } if (SD_MMC_OK != sd_mmc_wait_end_of_read_blocks(false)) { printf("[FAIL]\n\r"); return 1; } } return 0; } uint8_t write_fram_file(uint16_t num_of_file, uint32_t num_of_page_file, uint8_t *buf_write) { uint32_t t_num_page = (num_of_file-1)*blocks_8k_in_file+num_of_page_file; for (uint8_t i = 0;i<SD_MMC_BLOCK_count;i++) { if (SD_MMC_OK != sd_mmc_init_write_blocks(0, t_num_page+i, 1/*SD_MMC_BLOCK_count*/)) { printf("[FAIL] init write flash \n\r"); return 1; } if (SD_MMC_OK != sd_mmc_start_write_blocks(buf_write+i*512, 1/*SD_MMC_BLOCK_count*/)) { printf("[FAIL] write flash \n\r"); return 1; } if (SD_MMC_OK != sd_mmc_wait_end_of_write_blocks(false)) { printf("[FAIL] wait write flash \n\r"); return 1; } } return 0; } /** * \brief Card R/W tests * * \param slot SD/MMC slot to test */ static void main_test_memory(uint8_t slot) { for (uint32_t i=1; i<100; i++) { for (uint32_t j = 0; j < (8192/4 ); j+=4) { write_buf_pack_1[j] = 0x55; write_buf_pack_1[j+1] = 0xBB; write_buf_pack_1[j+2] = 0xAA; write_buf_pack_1[j+3] = 0xEE; if (j%512==0) { uint8_t tmp1 = j/128 + 1; write_buf_pack_1[j] = tmp1; write_buf_pack_1[j+1] = 0x0; write_buf_pack_1[j+2] = 0x0; write_buf_pack_1[j+3] = 0x0; } } write_fram_file(40, i, write_buf_pack_1); for (uint32_t k = 0; k < (8192); k++) { write_buf_pack_1[k] = 0x00000000; } } for (uint32_t i=1; i<100; i++) { read_fram_file(40, i, write_buf_pack_2); //здесь write_buf_pack_2 совпадает с write_buf_pack_1 только первыми 512 байтами for (uint32_t k = 0; k < (8192); k++) { write_buf_pack_2[k] = 0x00000000; } } } SD_MMC_EXAMPLE777777.rar
  12. Возможен вариант без файловой системы. Надо запустить nand в таком виде: чтение блоком, запись блоком и проверку на сбойные блоки В свете последних событий теперь можно использовать ОС и любую ФС. Осталось помочь с иницилизацией и конфигурировании nand флешей
  13. Ребят, У атмела в примерах fatfs уже адаптирован для nand. Для моих задач вполне хватит этой файловой системы, там немного адаптации кода для работы с конкретным нанд нужно, увы но у меня опыта не немного, времени много уходит. Запись на флешки будет около 1мбит. А по поводу других файловых систем то они под ОС, без оси я не нашел рабочего ничего. Если можно, то не надо предлагать код, который еще надо адаптировать за 1500USD. А по поводу доступа с компа к файловой системе через usb (чтобы как флешка определялась), это было бы идеальным вариантом, но я так понял что не получится сделать без специального контроллера.
  14. Предлагаю разовую работу. Надо запустить fatfs (запись и чтение) для nand на кастомной плате с процессором Atmel E70. Стоят две nand флеши. Работаю в atmel studio. ОС использовать нельзя. Плата доступна удаленно. Подробности по компонентам и оплате могу выслать письмом. Может кто-нибудь в теме по данному вопросу
  15. Иницилизация этих двух линий для микросхем одинаковая?
×
×
  • Создать...