Долго определяется CompactFlash в Linux
Есть у нас плата собственной разработки имеющая на борту АРМ9 процессор и, в частности, Compact Flash интерфейс. Встретились недавно со странной проблемой с Compact Flash в Linux. Карта работает в режиме True IDE и в момент загрузки возникали странные проблемы, появлялись сообщения о том что карта не отвечает, Linux производила неоднократный и безуспешный софтварный ресет ATA устройства, в конечном итоге карта определялясь и дальнейшая работа с ней происходила без каких-либо проблем.
Вот пример загрузочных сообщений:
[42949379.860000] ata1: link is slow to respond, please be patient (ready=0) [42949384.840000] ata1: device not ready (errno=-16), forcing hardreset [42949390.040000] ata1: link is slow to respond, please be patient (ready=0) [42949394.900000] ata1: SRST failed (errno=-16) [42949400.100000] ata1: link is slow to respond, please be patient (ready=0) [42949404.960000] ata1: SRST failed (errno=-16) [42949410.160000] ata1: link is slow to respond, please be patient (ready=0) [42949431.270000] ata1.00: ATA-0: , 20071116, max MWDMA2 [42949431.270000] ata1.00: 3964464 sectors, multi 0: LBA [42949431.280000] CF CSA 0001011a [42949431.280000] CF SETUP 01030103 [42949431.280000] CF PULSE 0c090c09 [42949431.290000] CF CYCLE 000e000e [42949431.290000] CF MODE 00000033 [42949431.330000] ata1.00: configured for PIO4 [42949431.350000] CF CSA 0001011a [42949431.350000] CF SETUP 01030103 [42949431.350000] CF PULSE 0c090c09 [42949431.360000] CF CYCLE 000e000e [42949431.360000] CF MODE 00000033 [42949431.400000] ata1.00: configured for PIO4 [42949431.400000] ata1: EH complete [42949431.420000] scsi 0:0:0:0: Direct-Access ATA 2007 PQ: 0 ANSI: 5 [42949431.430000] sd 0:0:0:0: [sda] 3964464 512-byte hardware sectors: (2.02 GB/1.88 GiB) [42949431.440000] sd 0:0:0:0: [sda] Write Protect is off [42949431.440000] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [42949431.450000] sd 0:0:0:0: [sda] 3964464 512-byte hardware sectors: (2.02 GB/1.88 GiB) [42949431.460000] sd 0:0:0:0: [sda] Write Protect is off [42949431.470000] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [42949431.480000] sda: sda1 [42949431.480000] sd 0:0:0:0: [sda] Attached SCSI disk [42949431.490000] sd 0:0:0:0: Attached scsi generic sg0 type 0
Все эти попытки начального запуска карты занимали порядочное время, порядка 30-50 секунд, но на фоне полного времени загрузки системы можно было с ними мириться. Но для реальной системы были закуплены CF карты с индустриальным диапазоном рабочей температуры и вот они наотрез "отказались" работать в нашей системе. В ходе разбирательств было выяснено, что проблема была в неправильной подтяжке сигналов BVD1 и BVD2, пины 46 и 45 разъема CF соответственно. Эти 2 сигнала требуются для работы процедуры распределения устройств master/slave на шине IDE и они должны иметь pull-down резисторы номиналом от 1к до 4.7к (мы поставили 2.2к). После ресета, программного или аппаратного, АТА устройство должно "договориться" с подчиненным висящим на той же шине, используя эти 2 сигнала. Очевидно, что наша карта добросовестно ждала, когда же подчиненный отпустит сигнал, но подчиненного на шине не было, а сигнал был притянут к питанию. Видимо, через какое-то время срабатывал внутренний тайм-аут и карта продолжала работать нормально. На рисунке с примером подключения CF из datasheet на AT91SAM9263 эти сигналы вообще никуда не подключаются, но у нас для обеспечения совместимости интерфейса Compact Flash с PCMCIA эти сигналы были заведены на процессор (через буфер) и подтянуты к питанию через резисторы 47к. Простое удаление pull-up-ов ни к чему не привело. А вот установка pull-down резисторов на эти 2 сигнала кардинально поменяло ситуацию в лучшую сторону.
Наверняка подобная проблема возникла не только у нас потому что на прошлой моей работе начальник как-то принес в кабинет к программистам коробку с новенькими Compact Flesh-ами и сказал, "забирайте кому надо". На вопрос "Почему раздаете?" был получен ответ о том что они "не работают правильно с Linux" на встраиваемом компьютере. Уж не была ли и там подобная проблема?
- блог пользователя GDI
- 6361 просмотр
Новые записи в блогах
- Устранение дребезга контактов на основе вертикальных счетчиков
- Диагностика Imprecise Bus Faults в микроконтроллерах Cortex-M3/M4/M4F
- Self-powered камера
- Фоновый модулятор: беспроводная связь из ничего (перевод)
- Texas Instruments Analog Applications Journal SLYT612 "Снижение искажений в аналоговых КМОП ключах" (перевод)
- USB MSD. Часть 6. Команды SCSI (перевод)
- USB MSD. Часть 3. USB класс накопителей данных (перевод)
- Texas Instruments Application Report SBAA042 "Кодовые схемы, используемые в аналогово-цифровых преобразователях" (перевод)
- 10 принципов правильного интерфейса
- Релиз SDK на русский микропроцессор КРОЛИК
Комментарии
Отправить комментарий