O kit de descoberta STM32MP157A-DK1 para o SoC STM32MP157 contém dois núcleos IP Bosch M_CAN (um M_CAN e um MTT_CAN) que suportam CAN FD.
Ao contrário do kit de descoberta STM32MP157C-DK2, o STM32MP157A-DK1 não fornece um conector (incluindo transceptor CAN e conector SUB-D9) para acessar os controladores CAN M_CAN. Por falar nisso. o STM32MP157C-DK2 fornece apenas acesso a um dos dois núcleos CAN IP disponíveis.
Para acessar os dois controladores CAN no STM32MP157A-DK1 precisamos ...
A configuração final provavelmente poderia ser assim:
Dois transceptores CAN FD presos em um cabo IDE antigo
Na verdade o wiki STM é muito bom e atualizado, então pode ser seguido para configurar seu sistema para construir seu próprio kernel Linux: Instalando o kernel Linux
Os pontos principais:
Antes de compilar o kernel com o compilador cruzado do SDK, os 3 patches a seguir precisam ser copiados para os 30 patches existentes no diretório linux-stm32mp-4.19-r0
:
Esses 3 patches podem ser encontrados no diretório patches.
Depois de copiar os 3 patches para o diretório linux-stm32mp-4.19-r0
basta seguir os passos do README.HOW_TO.txt que também pode ser encontrado nesse diretório para construir e finalmente instalar o novo kernel no destino.
O wiki do STM afirma: O arquivo auxiliar README.HOW_TO.txt é A referência para a construção do kernel Linux - e eles estão certos.
O hardware consiste em dois transceptores CAN FD (que também suportam Classic CAN 2.0) e alguns cabos:
Soldei os dois PCBs frente a frente na parte traseira para lidar com apenas um PCB e finalmente fixei o PCB com fita adesiva dupla-face no cabo IDE após soldar os pinos.
Os pinos para conectar para FD_CAN1 :
Função TRX | Pino TRX | Pino CN2 | Função CN2 |
---|---|---|---|
TXD | 1 | 03 | FDCAN1_TX |
VSS | 2 | 06 | GND |
VDD | 3 | 02 | +5V |
RXD | 4 | 05 | FDCAN1_RX |
VIO | 5 | 01 | +3V3 |
CAN_L | 6 | - | (CAN_L para SUB-D9 pino 2) |
CAN_H | 7 | - | (CAN_H para SUB-D9 pino 7) |
AGUARDADO | 8 | 09 | GND |
Os pinos para conectar para FD_CAN2 :
Função TRX | Pino TRX | Pino CN2 | Função CN2 |
---|---|---|---|
TXD | 1 | 36 | FDCAN2_TX |
VSS | 2 | 20 | GND |
VDD | 3 | 04 | +5V |
RXD | 4 | 10 | FDCAN2_RX |
VIO | 5 | 17 | +3V3 |
CAN_L | 6 | - | (CAN_L para SUB-D9 pino 2) |
CAN_H | 7 | - | (CAN_H para SUB-D9 pino 7) |
AGUARDADO | 8 | 14 | GND |
Fiz um esboço feio antes de soldar meus PCBs frente a frente, o que também representa uma mudança, pois não acertei o DTS na primeira vez. Somente pinos específicos podem ser usados para rotear as conexões CAN IP. Consulte os detalhes em "Kits de descoberta com MPUs STM32MP157 - Manual do usuário" (DevKit-en.DM00591354.pdf páginas 31 e 32).
Função | Pino BGA | Pino CN2 |
---|---|---|
FDCAN1_RX (também I2C5_SCL) | PA11 | 05 |
FDCAN1_TX (também I2C5_SDA) | PA12 | 03 |
FDCAN2_RX (também USART3_RX) | PB12 | 10 |
FDCAN2_TX (também USART3_CTS) | PB13 | 36 |
I2C5 e USART3 já estavam configurados como "desativados" no arquivo DTS STM32MP157A-DK1 antes. Portanto não teremos nenhuma interferência nesses pinos.
Muito obrigado a Alexandre Torgue da STM pelo trecho da árvore de dispositivos M_CAN! Aprendi muito com este pequeno hack para usar os núcleos IP M_CAN no STM32MP157A-DK1.
Por favor, deixe-me saber se você encontrar alguma incompatibilidade entre a descrição acima e a foto abaixo. Deveria dizer o mesmo. Esta descrição foi resumida até onde eu sei. Se não tiver certeza, verifique novamente a documentação do STM. Se você não consegue soldar as coisas, pergunte a outra pessoa. Você pode usar esta descrição como está por sua própria conta e risco!
Oliver Hartkoppp 2020-01-28