Há muito que eu queria ter algum tipo de interface de hardware simples e universal, com vários sinais de entrada e saída, cuja funcionalidade é determinada exclusivamente por software, como o memorável programador PonyProg . E para que possa ser usado não apenas como firmware de leitura / gravação, mas também para depuração de programas através do JTAG. Ao mesmo tempo, comprar algo industrial, com meus cuidados ocasionais com a eletrônica, é redundante e inútil - exigia algo de uma série de "produtos semi-acabados" baseados no bit-bang .O que é o bit bang e por que é necessário- , Windows 9x (COM) (LPT) . , , . , , . bit-bang, — «», «» ..
2k/XP /,
giveio. NT, - .
Como você sabe, computadores modernos, especialmente laptops, com portas de hardware não estão lotados, porque a maioria dos usuários não precisa deles. Os adaptadores USB para conectar dispositivos com as interfaces RS232 e Centronics (coloquialmente - COM / LPT) funcionam bem apenas dentro da estrutura do objetivo principal, e é problemático fazer "empurrões" neles por vários motivos. Em primeiro lugar, a maioria desses adaptadores pode processar apenas sinais de dados (o mesmo Tx / Rx) com boa velocidade e processa os sinais de controle com grandes atrasos. Em segundo lugar, adaptadores de diferentes fabricantes são incompatíveis com hardware, e as possibilidades de controle não padrão através do driver do fabricante são muito limitadas. Em terceiro lugar, quase todos os drivers usam pacotes USB separados para enviar comandos ao adaptador, o que limita a frequência das alterações de estado a apenas mil vezes por segundo,o que para muitas aplicações é catastroficamente pequeno.Felizmente, a FTDI oferece há muito tempo uma gama de soluções USB que se concentram especificamente na troca de sinais arbitrários em alta velocidade. Um estudo rápido da questão mostrou que a mais popular a este respeito são as interfaces nas FT232H / microcircuitos FT2232H .Soluções simples
Inicialmente, o FTDI implementou em suas interfaces USB FT232BM, FT232R e outros dois modos adicionais - bit-bang assíncrono e síncrono. Para isso, oito ou mais linhas de sinal adicionais são adicionadas, cada uma das quais pode ser configurada para entrada ou saída. Os dados em buffer transmitidos para a interface do computador são definidos nas linhas de saída pelos sinais do relógio, os dados de entrada são lidos das linhas, armazenados em buffer e enviados ao computador. A ligação de E / S ao relógio fornece boa precisão dos intervalos - o aplicativo não precisa mais cuidar de mantê-los programaticamente.Assim, em vez do ciclo tradicional do tipo “defina o nível ativo na linha de saída; pausa; leia o status da linha de entrada; definir o nível passivo na linha de saída ”, o aplicativo gera uma sequência de bytes, cada um dos quais define o estado das linhas de saída por um período de relógio. A sequência é enviada para a interface e, a partir daí, a mesma sequência é lida, refletindo o estado das linhas de entrada. No modo assíncrono, entrada e saída ocorrem independentemente uma da outra. Na leitura síncrona das entradas é realizada imediatamente antes de definir os sinais nas saídas, o que permite um trabalho mais confiável com sinais que mudam rapidamente.Controlador MPSSE
Na versão H dos chips FTDI, é adicionado um controlador serial síncrono multiprotocolo ( MPSSE ), cujo hardware implementa vários modos de troca de relógio e dados. A formação dos sinais do protocolo desejado é realizada transmitindo ao controlador uma série de seus comandos internos que especificam os métodos de relógio, o tempo dos sinais de configuração / leitura (na frente ou no fundo do pulso do relógio), a ordem da transmissão de bits (LSB / MSB). O controlador envia de volta uma sequência de "instantâneos" das linhas de entrada. A taxa de transferência de dados pode chegar a 30 Mbps.Por meio do MPSSE, os protocolos JTAG , I2C e SPI são naturalmente implementados.No entanto, quase qualquer “instabilidade” pode ser facilmente implementada dentro dos recursos de hardware do controlador.A FTDI oferece documentação extensa sobre como conectar e programar suas interfaces, bibliotecas e programas de amostra para trabalhar com os drivers MPSSE para Windows, Linux e MacOS , D2XX, para interação direta com a interface.Interfaces de FTDI são suportados pelos programas populares OpenOCD , UrJTAG , Flashrom , avrdude , HappyJTAG2 , zJTAG , etc.Problemas de conectividade
Tendo descoberto tudo isso em detalhes no ano passado, fiquei inspirado, mas imediatamente descobri que o FT232H / FT2232H, com toda a sua versatilidade, nem sempre podia ser conectado diretamente ao dispositivo final. Em primeiro lugar, as linhas externas dos microcircuitos são projetadas para o nível de 3,3 V, e em muitos dispositivos modernos são usados os níveis de 2,5 / 1,8 / 1,5 V. Em segundo lugar, as linhas de saída não podem mudar para o estado de alta impedância e vice-versa com alta frequência - isso é possível apenas no início. definindo as linhas selecionando o modo “entrada” ou “saída”. Ou seja, para conectar um chip com MPSSE ao dispositivo de destino, é necessário um circuito de buffer que corresponda aos níveis de sinal e forneça um desligamento operacional de algumas linhas de saída (por exemplo, com um nível de sinal TMS passivo/ Cs ).Pesquisando sobre as opções para circuitos de buffer, descobri que um número incrível de adaptadores foi feito no mundo que diferem um do outro apenas nesse buffer. Alguns programas (mas não todos) permitem o uso de diferentes tipos de buffers. Portanto, ao escolher um modelo de adaptador específico, você limita o intervalo de programas que trabalharão com ele. E, para decidir com antecedência sobre o tipo, era necessário pesquisar no Google e ler as discussões nos fóruns, o que eu não queria fazer. Alguns adaptadores permitiram definir a configuração do buffer com jumpers, mas isso está repleto de erros e eles não são baratos.Bus Blaster - reivindique versatilidade
A idéia masculina de Protótipos Perigosos era original duas vezes: o primeiro - como um buffer conectado ao chip PLT (CPLD) FT2232H Xilinx XC2C32A , que pode ser rapidamente reprogramado em qualquer configuração, e o segundo - para reprogramar o segundo canal do FT2232H. Além de implementar a lógica do buffer, o FPGA realiza a correspondência de níveis - suas linhas externas operam na faixa de 1,5 a 3,3 V.Como resultado, a placa Bus Blaster. Desde o advento do projeto, quatro versões do conselho foram substituídas. A versão 3. é considerada a mais estável e difundida.A versão 4 contém um FPGA grande que não está totalmente desenvolvido e é usado com muito menos frequência. As próximas versões, aparentemente, não serão mais, uma vez que o desenvolvimento do projeto foi interrompido há alguns anos. Tive a impressão de que poucas pessoas realmente experimentaram o conselho - com seu alto potencial, não é muito fácil de usar. Uma seção do fórum foi criada para o conselho , mas desde o ano passado quase nada foi escrito lá.Após reflexão, pedi na versão AliExpress 3c , como a mais desenvolvida, por US $ 34. Em seguida, eles foram vendidos por uma loja do fabricante - Seeed , e agora apenas revendedores de US $ 52 a vendem.Diretamente na Seeed (junto com o transporte), custará algo em US $ 37.Primeiras impressões
A placa parece exatamente igual à da foto - bonita, elegante, feita com alta qualidade. No fórum, alguém se queixou da falta de saída do microcircuito, então examinei cuidadosamente minha lente de aumento - não encontrei nenhum defeito. Eu já tinhadrivers D2XX instalados anteriormente, então a placa foi reconhecida em movimento. O primeiro passo foi lidar com a programação da lógica do buffer nos FPGAs. Isso é feito usando o programa UrJTAG , mas especialmente ajustado para o Bus Blaster para acesso adequado ao segundo canal do FT2232H.Primeiro, você precisa baixar e instalar a versão básica do UrJTAG . Então você precisa adicionar um arquivo EXE modificado e uma descrição do FPGA (BSDL) deste pacote. Para programar o FPGA incorporado, você precisa executar um EXE modificado para trabalhar com dispositivos externos - o principal. O procedimento de programação FPGA é descrito aqui . Por conveniência, você pode criar scripts para o UrJTAG para cada versão do buffer e arquivos CMD com linhas de comando para executá-los.Uma coleção de firmware FPGA que descreve buffers compatíveis com os adaptadores JTAGkey , KT-Link e PicoTap está disponível aqui , mas para o BBv3 há apenas um arquivo para o JTAGkey com suporte para autoteste (BBV3-JTAGkey-selftest-v1.1.svf). A maioria é suficiente, mas não funcionou para mim com o flashrom , que será discutido abaixo.Após escrever este firmware no FPGA, coloquei os jumpers no conector para autoteste, conforme descrito na documentação , e fechei a linha P28 (IO09) no chão - o LED na placa acendeu. Baixei e lancei o programa de teste - ele mostrou que está tudo em ordem.A propósito, é estranho que o programa de autoteste seja chamado "BusPiratev2Test", porque o Bus Pirate é um projeto completamente diferente, não compatível com o BB .No começo, eu geralmente acreditava que esse firmware era destinado apenas para autoteste e para aplicativos de "combate", alguns outros eram necessários, porque a descrição diz algo inaudível. Então eu descobri que o firmware é universal, apenas o modo de teste é ativado com o curto-circuito em P28 para o chão.( , , 404)
flashrom v0.9.6.1-r1704/Win32, -
MX25L8005 (SPI), , "
-p ft2232_spi:type=busblaster". flashrom , FT2232.
,
libusb — , Linux, Windows.
libusb , , . - SPI- — . —
TMSmexe, TCK está, TDO está ativado e silêncio no TDI . Em geral, nem um único aumento. Conectei os canais do osciloscópio simultaneamente ao TCK e TDO - os sinais mudam de forma síncrona, claramente. Não havia idéias sobre o que poderia ser verificado ainda. Desistirtemporariamente de experiências com o flashrom , conectado à interface ATTiny13 . Baixando aqui algumas versões diferentes avrdude , com a versão 5.11-Patch7610 / Win32 e o tipo de programação 2232HIOfinalmente conseguiu uma identificação clara, leitura e gravação do controlador. Depois de se regozijar, ele reconectou os chips SPI, mas o flashrom se recusou teimosamente a reconhecê-los.Suspeitando que os dois microcircuitos estejam mortos, ele retirou o USBASP 2.0 , que foi trocado pelo AsProg - ele leu os dois sem problemas (embora muito lentamente). A propósito, comprei três USBASPs em geral para o papel de convenientes placas de prototipagem no ATMega8, mas o dispositivo acabou sendo inesperadamente multifuncional.Conectei os microcircuitos ao BB novamente e comecei a tentar o flashrom em diferentes modos (Bus Blaster e JTAGKey), com diferentes valores de divisores ( -p ft2232_spi: type = busblaster, divisor = n) De repente, em uma das combinações, o microcircuito foi reconhecido, mas já se recusou a ler. Depois de mais algumas tentativas, a identificação também desapareceu. Então, várias vezes foi possível obter várias identificações bem-sucedidas seguidas, mas a leitura nunca foi alcançada.Postado no fórum, mas não recebeu nada sensato em resposta. Tendo vasculhado a pesquisa, encontrei reclamações de várias pessoas sobre o firmware FPGA universal (com autoteste), encontrei mais três versões de firmware lá, tentei-as em diferentes combinações com outros parâmetros, mas não obtive sucesso. Tendo esgotado todas as opções, ele abandonou os experimentos até a chegada do analisador lógico ordenar um pouco mais tarde o BB.Testando com um analisador
Tendo recebido um clone do popular analisador lógico Saleae Logic 16 , ele o conectou às quatro linhas SPI . O programa, disponível gratuitamente no site da Saleae , pode descriptografar I2C, SPI e vários outros, mostrando imediatamente a descriptografia de todos os pacotes - enviados e recebidos. Imediatamente ficou claro que os pacotes estão "flutuando" - a mesma sequência de bits é agrupada pelo programa repetidamente em pacotes em limites diferentes.Comparando os diagramas de sinal nas fichas técnicas dos microcircuitos com os gravados, em algum momento notei que o sinal TMS (conectado ao pino CS) no início de cada sessão de intercâmbio, ele passa a um nível baixo (ativo), no qual permanece, embora, de acordo com o protocolo, ele retorne a um nível alto (passivo) no final de cada operação. Mudei o firmware "oficial" do FPGA para um dos alternativos - o TMS começou a se mover mais ativamente, as bordas dos pacotes alinhadas e, após selecionar o divisor de freqüência do relógio na linha de comando do flashrom (parado em 8), o microcircuito finalmente começou a responder claramente a cada solicitação, ler e substituir .Pensando em como não prestei a devida atenção ao comportamento do TMS , percebi que estava confuso com o trabalho bem-sucedido com o AVR no mesmo firmware FPGA. Olhando para a folha de dados ATTiny13, descobri que o sinal RESET , que o TMS iniciapode ser baixo durante todo o tempo de troca; seu aumento para sincronização não é necessário. E os chips SPI precisam de seu crescimento para sincronização.Como resultado dos testes, reuni informações sobre três firmware FPGA conhecidos em uma postagem do fórum .Limite de reescrita de FPGA
Em uma das discussões, me deparei com um aviso de que o número garantido de ciclos para reescrever o firmware deste FPGA é de apenas cerca de mil. A princípio fiquei chateado, porque durante os experimentos consegui mudar o firmware cerca de cem vezes e já imaginava a morte iminente do chip. Não custa nada, mas não quero mexer na solda. Então ele percebeu que, com uma abordagem adequada, os novecentos ciclos restantes seriam suficientes por muitos outros anos.Piscando no circuito da ROM no roteador
Depois de algum tempo, formei um mini-roteador recém-assado no RT5350F sob o codinome "ZLMNet H-G5 / P8201" (designações extraídas da interface da web). Na mesma época, o clipe do SOIC8 / SOP8 também chegou - eu decidi tentar trabalhar no circuito com a ROM.A princípio, o flashrom não viu a EPROM através do BB. O osciloscópio mostrou que o processador invariavelmente derrotou a luta entre o FPGA e o processador do roteador pelos níveis de sinal de CS e CLK . O que não é surpreendente - no BB entre os terminais FPGA e o conector, existem resistores limitadores de corrente que salvam as chaves FPGA de baixa corrente do desgaste.Conectei o USBASP ao AsProg - este lê / grava normalmente, mas mais uma vez lentamente (9 minutos para ler, 25 minutos para o ciclo de apagar-gravar-verificar). Para uma única revitalização de um tijolo, ainda é aceitável, mas para experimentos com firmware instável, ele não está mais lá. Além disso, o AsProg não sabe trabalhar com páginas individuais - apenas com o microcircuito inteiro.Soldei entre as saídas TMS / TCK no BB e as entradas CS / CLK da EPROM para o seguidor de emissor - os sinais imediatamente reduzidos para quase os níveis corretos, reconheceu o chip flashrom, começaram a ler / escrever com confiança. Com um divisor de 8, uma leitura completa leva menos de um minuto, a reescrita leva cerca de dois minutos.Aconteceu que a comunicação do programador com a EPROM não interfere no processador - o roteador está funcionando perfeitamente. Obviamente, as linhas CS / CLK são alocadas apenas para a EPROM, que é lida uma vez na inicialização, após a qual o processador não acessa, a menos que você comece a piscar com meios regulares.Desvantagens dos programas BB
Os programas testados (zJTAG, flashrom, avrdude, UrJtag, OpenOCD) que podem trabalhar com o MPSSE deixaram uma impressão muito triste. Primeiro, na maioria desses programas, com toda a variedade de adaptadores FTDI, não há indicação explícita de VID / PID - os identificadores de adaptadores conhecidos são codificados no código. Mas para JTAGkey, que emula BB, o PID é definido como CFF8 e, para FT2232H "limpo", é definido como 6010. Claro, você pode alterar os identificadores no BB usando FT_Prog ou corrigir a tabela no programa, mas as duas opções são igualmente tortas. Bem, consegui encontrar uma versão do flashrom com o suporte do BB compilado para Windows (caso contrário, eu teria que instalar o CygWin), e o avrdude funciona bem ao especificar o tipo de programador 2232HIO .Em segundo lugar, alguns programas funcionam com o adaptador apenas através da biblioteca libusb , que, por sua vez, funciona através de seu próprio driver, que é incompatível com os drivers FTDI. É bom que, no Windows, para alternar entre drivers, você não precise remover completamente um e instalar o outro - você só precisa "atualizá-lo" escolhendo à força o driver certo para o dispositivo em questão (canal A ou B).achados
Agora, relembrando a quantidade acumulada de tempo e os nervos gastos em todos os experimentos descritos, entendo que o preço da elegância externa e a aparente universalidade da solução se mostraram proibitivos. Passo esse tempo adicionalmente no trabalho principal - ganharia alguns programadores e depuradores industriais sérios. Mas a vantagem indubitável é que esses exercícios, pelo menos de alguma forma, permitem que você abstenha-se do slide final para o consumo líquido de módulos personalizados prontos, que os chineses oferecem em abundância. Nesse sentido, é possível invejar os engenheiros antigos e medievais - por décadas eles puderam resolver com entusiasmo os problemas há muito resolvidos em alguns milhares de quilômetros no bairro, sem saber.Devemos experimentar o OpenOCD e o JTAG em alguns roteadores disponíveis, mas todo mundo não coloca as mãos nele.Protótipos perigosos também tem um projeto mais antigo de ônibus pirata . Há uma placa PIC e uma interface simples FT232BL no modo serial tradicional. Para se comunicar com o controlador, são utilizados comandos regulares de terminal e texto, as respostas também são exibidas em forma de texto. avrdude, flashrom e vários outros programas também podem funcionar com a BP, no entanto, por razões óbvias, a velocidade é várias vezes menor. A baixa velocidade é compensada pela amplitude de aplicação - há muitas opções para usar o BP para emular vários protocolos.Pensando que nesta vida você precisa tentar de tudo, eu pedi o BP v3.6com cabo. Sim, sim, lembro-me dos ratos do cacto e sobre "amanhã irei lá novamente".