Jump to content

    

galjoen

Свой
  • Content Count

    834
  • Joined

  • Last visited

Everything posted by galjoen


  1. Это будет самодельная среда а-ля CAN. В стандарте RS485 прописано как должны передаваться 0 и 1. Драйвер стандарта RS485, передающий 0 по стандарту RS485, а 1 не по стандарту RS485, перестает быть драйвером станндарта RS485. В тоже время он не станет драйвером стандарта ISO 11898 (High speed CAN transceivers) т.к. уровни 1 у RS485 и у High speed CAN transceivers отличаются.
  2. А как это делалось? И для чего? Для CAN необходимо наличие доминантного и рецессивного уровней. Причем если 100 устройств выдают в линию рецессивный уровень, а 1 доминантный - в линии будет доминантный уровень. RS485 такими свойствами не обладает. Хотя конечно можно на вход передатчика драйвера RS485 подавать 0 (всегда), а управлять разрешением передачи (активный уровень д.б. нулевым). То есть при выдаче 1 в линию передатчик будет в высокоимпедансном состоянии. 1 на линии установится за счет резисторов (от A к +5V, от B к земле). Такого-же результата можно добиться с помощью диодов. Но это уже не будет "среда передачи по стандарту RS485".
  3. Хочу использовать драйвера от CAN, но подавать на них сигналы от USART. Т.о. получится что-то типа RS485. Наверное даже будет работать сеть где часть драйверов от CAN, а часть от RS485. :( Недостатки: 1. Драйвера CAN чуть дороже (10..20 рублей). 2. Max скорость чуть меньше (0 устанавливается активно как и у RS485, а 1 только за счёт резисторов). Преимущества: 1. Не надо переключать приём-передачу т.к. передаются только 0, а при 1 на выходе USART в линию ничего не идет. Это ценное свойство для тех, кто управляет RS485 через COM порт компьютера т.к. не надо управлять направлением передачи (кто делал это под виндой знает об этой проблеме). Также в случае гальванической развязки нужно только 2 канала, а не 3 (это с лихвой компенсирует удорожание драйвера). 2. У CAN драйвера есть возможность завалить фронты (к специальной ноге подключается резистор на землю). Т.о. уменьшается генерация помех в эфир, и главное в саму шину ( за счет этого реальная скорость, в случае не слишком хорошей линии, будет даже больше чем с драйвером RS485). 3. Если один передатчик будет выдавать в линию 0, а другой 1 больших токов, в отличие от RS485, не потечёт (для CAN это нормальный режим). 4. Если при передаче в линию слушать, что там действительно происходит, и при расхождении прерывать передачу, то ускорится обработка ошибок в линии (в RS485 такой режим невозможен т.к. мы в любом случае услышим только себя. Даже если кто-то и выставит противоположный уровень, в линии потечет большой ток :smile3009: , на его конце будет его уровень, а на нашем наш). Например, если slave-устройство выдает в линию 256 байт по запросу, а нам нужно срочно выдать команду, можно остановить передачу послав в линию 0й байт или просто 0. Я понимаю, что таким образом мы приближаемся к CAN интерфейсу, который имеет все эти полезные свойства и еще много других, и вообще по всем параметрам лучше RS485 (кроме цены). Но вот в цене-то и вся собака порылась. Микроконтроллера с CAN на борту дешевле $8 я не нашел, а микроконтроллер с UART, бывает и <$2. Кроме того решается проблемма соединения с компьютером. RS485 можно подключить через COM порт, а для CAN такой способ не проходит.
  4. Если флеш отвечает NAK - значит не DATA1/0 попутаны. Тогда бы ACK ответила, а данные проигнорировала (ну или STALL). Больше на ошибку в CBW или в команде похоже. А какие какие команды посылаете? Данные во флеш или из неё? На форум выложите. Попробуйте данные во флеш послать. Write(10) 0x2A код (всё равно делать надо будет). Только не в начало, а то флеш так запороть можно, что и не отформатируешь потом. А ещё м.б. флешкам SOF каждую милисекунду для работы нужен - кто их знает этих китайцев?