Pesquisar na Comunidade
Mostrando resultados para as tags ''i2c''.
Foram encontrados 3 registros
-
 tutorial Como ler o que a placa diz: UART, JTAG e Debug em MacBooks e Notebooks (Projeto EBR)
NinjaInfo postou um tópico em Treinamento Notebooks
I — O que é uma porta de depuração? Estamos estruturando no EBR um mapeamento prático das portas de depuração (UART, JTAG e SWD) em notebooks — principalmente MacBooks, Intel, T2 e Apple Silicon. A maioria das placas possui um microcontrolador chamado EC (Embedded Controller) que fica ligado assim que a placa recebe 3,42v G3H ou 1,8v EC. Mesmo com a máquina “morta”, o EC já está rodando código e muitas vezes já envia mensagens por UART. Em muitos notebooks, essas linhas UART não aparecem como um conector separado. Elas vêm misturadas no próprio conector JTAG / Debug ou até roteadas para o USB-C (SBU1/SBU2) quando a porta entra em modo de debug. Basta ligar no TX do EC ou do CPU para capturar mensagens de inicialização, erros de power, falhas de reset, etc. Em resumo: boa parte das soluções modernas de debug combinam JTAG e UART no mesmo cabo, e muitas placas de notebook expõem o TX da UART do EC nesses conectores. Esse recurso, aliado ao fato de o EC ser energizado por uma LDO always-on, permite extrair logs úteis logo nos primeiros instantes de alimentação. Isso transforma uma placa aparentemente morta em uma fonte de informação. Além do JTAG, muitos MCUs implementam um pino opcional chamado SWO (Serial Wire Output) que fornece um “canal de printf” assíncrono para envio de mensagens. O SWO é unidirecional e pode transmitir logs semelhantes ao UART (por Manchester ou UART), mas não permite enviar comandos para a CPU. Em outras palavras, o SWO funciona como um “UART embutido” dentro da interface SWD/JTAG. Dentro de todo notebook — inclusive MacBooks T2 (2018–2020) e Apple Silicon — existe uma “boca secreta” como TP_SOC_DEBUGPRT_TX / RX que a placa usa para falar. Essa boca é chamada de porta de depuração. Ela é usada para saber: Se o processador acordou Se a memória respondeu Onde o notebook travou Mesmo quando não liga, essa porta muitas vezes continua falando. II- O que é UART? UART é o idioma mais simples que a placa usa para falar. Ele só precisa de: TX → a placa falando Level Shifter → ampliar ou reduzir amplitude do sinal serial GND → terra (referência elétrica) É como um walkie-talkie: um fio fala, o outro escuta TX+RX; Só vai nos interessar a transmissão. saída serial de firmware (debug console) em ASCII. Cada linha que aparece ali foi escrita por um engenheiro da Apple, Intel ou do fabricante do EC para responder perguntas como: – “o chip acordou?” – “a RAM respondeu?” – “o power-good veio?” – “o firmware carregou?” III — Como a gente escuta a placa? A partir daqui, a intenção não é só ligar um cabo: é padronizar como o EBR captura, interpreta e compara esses sinais. Usamos um adaptador USB → UART. O computador não entende direto o idioma da placa. Então usamos um adaptador chamado USB → UART. Alguns exemplos: CH341A USB-UART level selectable (1.8V / 2.5V / 3.3V / 5V) Eles transformam: USB do PC → sinais UART da placa Ela vai dizer coisas como: falha de ALL_SYSPWRGD erro de memória RAM falha de ME REGION reset infinito watchdog do EC Isso permite saber se o defeito é elétrico, firmware ou lógico. Se esses logs começarem a ser postados aqui, em pouco tempo teremos um mapa real de como as placas falham. Isso é o que falta hoje na bancada: memória coletiva. IV — Onde encontrar o UART na placa (T2, EC, JTAG e ARM Silicon USB-C) Depois de entender o que é UART e por que ele existe, o próximo passo é simples: Onde estão esses sinais na placa? Na prática, quase todo notebook moderno possui pelo menos dois UARTs: Um do EC (Embedded Controller); Um do CPU / SoC; E eles aparecem de muitas formas diferentes. 1) UART do EC (Embedded Controller) Mesmo com a máquina sem vídeo, sem boot e sem BIOS, o EC já está tentando inicializar e vai mandar mensagens por esse TX. O EC é o primeiro chip a ligar quando a placa recebe 1.8v ou 3,3v LDO. Antes do BIOS, antes do PCH, antes do CPU. Por isso, o UART do EC é o mais importante para diagnóstico de placas mortas que ainda sussurram. Nos esquemas ele aparece com nomes como: EC_TX EC_RX KBC_TX KBC_RX SMC_DEBUG_TX EC_DEBUG_TX HOST_DEBUG_TX e ETC. Se você encontrar um ponto de teste escrito TX perto do KBC, SMC, T2 no Board View, quase sempre é ele. 2) UART dentro do conector JTAG / Debug Muita gente acha que JTAG serve só para programação. Na prática, a maioria dos conectores JTAG de notebook também carrega UART. Fabricantes fazem isso porque: JTAG é usado para depurar o dispositivo via UART que é usado para ver logs então eles colocam tudo no mesmo conector Por isso você encontra conectores com sinais como: TMS TCK TDI TDO e também: DEBUG_TX Mesmo quando o conector não está populado, os pads na placa quase sempre existem. Se você localizar o conector JTAG do EC, há grande chance de ali existir um TX de UART pronto para uso. 3) UART roteado pela USB-C (SBU1 / SBU2) Nos notebooks ARM modernos mais novos (Apple Silicon M), o UART muitas vezes não sai em pads físicos. Ele é roteado para a porta USB-C quando ela entra em modo de debug. Nesse modo: SBU1 vira UART TX SBU2 vira UART RX Isso é o mesmo UART do EC ou do CPU, apenas passando pela Type-C. Com um cabo Type-C breakout ou um adaptador, dá para ligar um USB-UART nesses pinos e capturar os logs sem abrir a máquina. V — Adaptação do CH341 com level shifter para UART seguro em 1.8 V e 3.3 V Pessoal, conforme fui avançando nos testes de UART em placas de MacBook, T2, ficou claro um problema sério: os adaptadores USB-UART comuns (CH341, FT232, PL2303) trabalham em 5 V ou 3,3 V, enquanto a maioria dos SoCs, T2 e ECs modernos usam 1,8 V. Ligar RX/TX direto nesses chips pode: – não funcionar – gerar ruído – ou até danificar o SoC Os adaptadores comuns trabalham em 5 V ou 3,3 V. Mas EC, T2 e Apple Silicon usam 1,8 V. Por isso estamos modificando o CH341 com level shifter interno. Isso cria um padrão de hardware para o EBR. CH341 (USB 5 V) → Level Shifter → Placa (1.8 / 3.3 V) Por isso comecei a modificar o próprio CH341, adicionando internamente um level shifter (conversor de nível lógico) entre o CH341 e a placa. Isso cria um padrão de hardware para o EBR. Isso permite capturar logs de: EC, PCH, T2, iBoot, BootROM e Apple Silicon sem risco. Por que isso muda tudo? Com isso o CH341 deixa de ser um programador/cabo TTL barato” e vira uma interface de debug profissional. Os principais benefícios: • Permite ler UART de T2 e Apple Silicon sem risco • Funciona tanto em 1,8 V quanto 3,3 V • Evita back-power e latch-up no SoC • Permite deixar o adaptador conectado durante boot, reset e falha • Permite capturar logs de EC, iBoot, BootROM e kernel sem danificar a placa Na prática, isso faz com que portas de aparelhos que parecem “bloqueadas” ou “mortas” simplesmente passem a funcionar, porque o problema real era elétrico, não lógico. A ideia é simples: CH341 (USB, 5 V) → Level Shifter → Placa (1,8 V ou 3,3 V) O level shifter é alimentado pela mesma tensão da placa 820-00850 (por exemplo, P1V8SLPS2R_SW0 ou PP1V8_UPC_ vinda do Controlador PD, do EC do notebook ou de um Rail Always-On ou LDO). Assim ele só funciona quando a placa está viva e nunca injeta tensão mais alta no SoC. Objetivo desse projeto no EBR A ideia é que, com esse tipo de adaptador, a gente possa padronizar: – Captura de logs e armazenamento; – Depuração de falhas de power até S0; – Análise de ITE, ENE, MEC, EC, PCH, T2, Apple Silicon e outro; – Desenvolver uso do UART via USB-C ou test points dos SUPER IO, SMC e T2; – Contribuir com pontos de teste, logs ou pinouts está ajudando a transformar tentativa-e-erro em engenharia de bancada; – E usar isso para alimentar o banco de dados colaborativo do EBR sem fins lucrativos. Quem já tentou UART direto e teve problemas, recomendo testar esse método. Vocé vai precisar cortar o UART que sai do CI Ch341 de 5v para fazer a adaptação e tranformar nosso programador velho em uma ferramenta TLL de 1.65v a 5v A parte difícil (e a que realmente importa) é esta: 1. pegar um CH341 de verdade, 2. pegar um bisturi, 3. cortar trilhas, 4. soldar fios, 5. adaptar o CI level shifter, 6. testar em placa real É isso que transforma um “esquema bonito” em uma ferramenta que realmente funciona na bancada. Por isso, na próxima etapa, eu não vou ficar só em diagrama. Vou fazer o procedimento em um CH341 virgem, aqui na minha bancada. Vou usar um TXS0102 (ou similar) retirado de sucata de notebook ou MacBook, cortar as trilhas de RX/TX que saem do CH341 em 5 V, e inserir o level shifter no meio, do jeito certo: CH341 → Level Shifter → Placa Isso é muito mais valioso do que qualquer imagem desenhada no computador, porque mostra: • onde cortar • onde soldar • quais pinos usar • onde ligar VCCA, VCCB, OE • como alimentar pelo 1.8 V ou 3.3 V da placa • como evitar back-power Próximos passos Vou postar aqui: Fotos reais do CH341 Onde as trilhas são cortadas Onde o TXS0102 entra Como ficou depois da modificação E logs reais capturados em MacBook (CoolTerm) A ideia é que qualquer técnico consiga olhar isso e dizer: “ok, eu consigo repetir isso na minha bancada”. Um pedido simples Esse projeto tomou tempo, estudo, sucata, erros e testes. Se você acha que isso pode ajudar a comunidade, deixa um joinha no tópico. Isso me motiva a ir até o fim e publicar tudo — inclusive logs reais e casos práticos. O objetivo é simples: fazer algo longo, completo, mas que qualquer pessoa consiga entender em 10 minutos e sair sabendo: onde ligar, como medir, e como ouvir a placa falar. Continua -
 tutorial I3C, o futuro substituto dos barramentos I2C e SPI?
Linuxsc Marchetti postou um tópico em Treinamento Eletrônica
Atualmente, os barramentos I2C e SPI são os mais utilizados para conectar dispositivos externos (sensores, EEPROM, etc) a microcontroladores e SoCs. Mas a vida útil deles pode estar no fim, porque vem aí o barramento I3C. O I2C é um barramento bem antigo, criado em 1982 pela Philips Semiconductor, com mais de 35 anos de vida! É um barramento simples, com apenas duas linhas de comunicação: clock (SCL) e dado (SDA). Esta simplicidade facilita o projeto da placa de circuito impresso, mas traz algumas desvantagens. O endereçamento é feito no protocolo, sendo tipicamente limitado a 7 bits, o que permite um máximo de 127 dispositivos conectados ao barramento. Outra grande desvantagem do barramento I2C é a velocidade de comunicação, tipicamente de 100Kbit/s a 400Kbit/s. O barramento SPI também é bastante antigo, criado em meados da década de 80 pela Motorola. Sua arquitetura é mais complexa, exigindo 4 linhas de comunicação: clock (SCLK), master output (MOSI), slave output (MISO) e slave select (SS). Comparado ao I2C, sua grande desvantagem é a complexidade do projeto da placa de circuito impresso, principalmente se você tiver mais de um dispositivo SPI conectado ao barramento, o que vai exigir pinos extras de I/O para fazer a seleção do slave (chip select). Mas a velocidade de comunicação é muito maior, podendo chegar a 60Mbit/s, dependendo do clock da CPU e do dispositivo. O barramento SPI também consome menos energia que o barramento I2C. Qual o problema destes barramentos? Nenhum. A questão é que eles se complementam, cada um resolvendo um domínio de problemas diferentes. O I2C é mais simples, porém mais lento. O SPI é mais rápido e consome menos energia, porém pode aumentar bastante a complexidade do projeto de hardware. Além disso, ambos os barramentos I2C e SPI não suportam interrupções. Isso significa que será necessário o uso de pinos extras de I/O para receber interrupções de dispositivos conectados a estes barramentos. O mesmo vale para gerenciamento de energia. Não existe nenhum suporte nestes barramentos para colocar um dispositivo em modo de baixo consumo, e normalmente a implementação de gerenciamento de energia é feita por fora, via algum registrador do dispositivo ou pino extra de I/O. E se eu disser à vocês que o barramento I3C tem tudo isso e muito mais? :-) O I3C é um padrão de barramento criado pela MIPI Alliance, a mesma responsável por outros barramentos bastante comuns como o CSI (Camera Serial Interface) para câmeras. O nome I3C vem de Improved Inter Integrated Circuit, e seu desenvolvimento começou em meados de 2014. A primeira versão da especificação foi lançada no começo de 2017, e em dezembro de 2017 o padrão foi aberto ao público, o que deve incentivar seu uso no projeto de novos circuitos integrados. O I3C traz o melhor dos mundos I2C e SPI. É simples, e assim como o I2C, utiliza apenas duas linhas de comunicação: clock (SCL) e dado (SDA). Mas é muito mais rápido que o I2C, com velocidades comparáveis ao SPI, começando em 10Mbit/s e podendo passar de 30Mbit/s! O I3C possui suporte à interrupção integrado ao barramento de comunicação (In-Band Interrupt). Ou seja, você não precisa de pinos extras de I/O para receber uma requisição de interrupção de um dispositivo I3C. O mesmo acontece com gerenciamento de energia. Já existe suporte integrado no barramento para gerenciamento de energia e modos de baixo consumo de dispositivos I3C. O endereçamento dos slaves é dinâmico. Isso significa que, durante a inicialização do barramento, o master atribui dinamicamente endereços aos slaves conectados ao barramento. Além disso, cada dispositivo I3C possui um número identificador de 48 bits chamado Provisional ID, que contém informações sobre o dispositivo, incluindo o fabricante e o part number. Desta forma, o master consegue identificar (enumerar) em tempo de execução os dispositivos conectados ao barramento. Ou seja, não será necessário declarar dispositivos I3C no device tree! O barramento I3C é hotplug (eles chamaram esta funcionalidade de hot-join). Ou seja, você pode conectar um dispositivo no barramento I3C dinamicamente, em tempo de execução. Além disso tudo, o I3C é compatível com o I2C. Isso significa que, se foram tomados alguns cuidados com o projeto da placa de circuito impresso, dispositivos I2C irão funcionar em um barramento I3C! Tem uma tabela bem bacana disponível na documentação que resume o funcionamento do barramento, diferenciando o I3C, I2C e SPI (clique na tabela para abrir uma versão de melhor resolução): Por falar em documentação, este Whitepaper resume as características do barramento, existe um FAQ de leitura rápida que pode tirar muitas dúvidas sobre seu funcionamento, além claro da especificação completa que pode ser baixada no site da MIPI Alliance. Ainda não existem dispositivos compatíveis com I3C, mas o kernel Linux está em vias de suportá-lo com a segunda revisão dos patches enviada recentemente pelo Boris Brezillon, e atualmente existem algumas implementações de IP do I3C, como este da Silvaco e este da Cadence. A especificação do I3C foi desenvolvida pelo MIPI Sensor Working Group da MIPI Alliance, que possui entre seus membros empresas gigantes como AMD, Broadcom, Google, Cadence, Intel, Lattice, MediaTek, Mentor Graphics, Nvidia, NXP, Qualcomm, Sony, STMicroelectronics, etc. Não dá para negar a força destas empresas no mercado de tecnologia e semicondutores, e somando a isso o fato do padrão ser aberto ao público e não ter nenhum tipo de royalties associado, é bem provável que a partir de 2018 comecem a aparecer dispositivos, microcontroladores e SoCs compatíveis com este barramento. Quem viver, verá! Não esqueça de dar um joinha! Um abraço... Conteúdo escrito por https://sergioprado.org/i3c-o-futuro-substituto-dos-barramentos-i2c-e-spi/ Sergio Prado-
- 2
-
-
-
- protocolo de comunicação
- i2c
- (mais 3)
-
Segue o projeto compreto em .dpcb Droid-pcb versao 2.0.7: Download do projeto completo: Imagem : Esquema base: Download:
-
- gravador de eeprom 93c ponyprog2000
- i2c
- (mais 6)
SOBRE O ELETRÔNICABR
Técnico sem o EletrônicaBR não é um técnico completo! Leia Mais...
