domingo, 16 de junho de 2024

MILK-V DUO - Tutorial - IMG, Comunicação, ETH, LED BLINK

  

Tutorial do MILK-V DUO

Seção 1: Tutorial de  gravação da Imagem do  MILV-V Duo

Uma vez com a imagem em mãos, abra o Win32DiskImager software, selecione o arquivo de imagem, escolha o dispositivo e clique em "Gravar".

Após a bem sucedida escrita, a unidade USB pode ser ejetado.

Insira o cartão SD no slot da placa de desenvolviemnto MILK-V DUO, a alimentação é  através de USB 5V, aguarde cerca de 5 segundos, e o indicador azul do sistema executando começará a piscar, indicando que o sistema está funcionando normalmente.

Seção 2: MILK-V Duo USB (RNDIS) - Acesso ao Terminal

1. Atualização RNDIS Drivers:

Depois de gravar a imagem, conecte uma extremidade do USB para o seu computador e a outra extremidade à  core da placa MILK-V DUO. Quando  a luz indicadora da placa do núcleo do sistema piscar, verifique se o computador no Gerenciador de Dispositivos. Você vai ver o RNDIS opção em "Outros dispositivos".

Clique com o botão direito do mouse sobre RNDIS e escolha "Atualizar driver".

Selecione "Procurar software de driver no computador."

Selecione "Permitir que eu escolha em uma lista de drivers disponíveis no computador."

Role para baixo e selecione "adaptadores de Rede".

Sob o Fabricante coluna, escolha "Microsoft" e sob o Modelo de coluna, selecione "Remote NDIS Dispositivo Compatível."

Finalmente, quando o "Aviso de Atualização de Driver" aparecer, selecione "Sim" para concluir a RNDIS atualização de driver.

Depois de atualizar o driver RNDIS, um novo dispositivo chamado "Remote NDIS Compatible Device" vai aparecer sob a seção adaptadores de Rede, indicando que o controlador RNDIS foi atualizado com êxito.

**2.Usando o Terminal SSH para se Conectar Remotamente ao MILKV DUO  (Usando o PuTTY é um Exemplo): **

Digite "Nome do Host" como 192.168.42.1 (este ID é fixo), e escolha a Porta 22.

início de sessão:root
senha:milkv

Seção 3: Login do MILK-V pela UART Serial

1.Conexão de Hardware

Os pinos do USB TTL USB (Dispositivo Serial) cabo de são definidos da seguinte forma:

Conecte o USB ao cabo serial TTL para a placa de desenvolvimento  Milk-V Duo, como mostrado abaixo (não ligue o fio vermelho):

MILK-V DUO<--->USB TTL
TX (pino 16)<--->RXD
RX (pino 17)<--->TXD
GND (pino 18)<--->GND

Depois de ligar a comunicação serial do dispositivo para o computador, o nome do dispositivo correspondente e o nome da porta (neste caso, COM15) será exibido no Gerenciador de Dispositivos.

Uso de software de acesso remoto (PuTTY é aqui utilizado) e selecione Serial. Escolha o número da porta correspondente à série do dispositivo de comunicação (COM15) e definir a velocidade de 115200.

Quando a placa de densevolvimento MILK-V Duo dá boot, ele irá imprimir informações de status do sistema, e você verá a interface de linha de comando. Isso indica bem-sucedida série de login.

O padrão serial definições para Duo u-boot e o kernel do console são:

taxa de transmissão:115200
bits de dados:8
bit de parada:1
paridade:nenhum
controle de fluxo:nenhum

Atenção! Se você tentar usar o login serial enquanto a placa de desenvolvimento estiver ligada, é provável que o software de login do console permaneça em um estado bloqueado. Recomenda-se primeiro usar o software de acesso remoto para estabelecer um login serial (que inicialmente entrará em um estado bloqueado) enquanto a placa de desenvolvimento está completamente desligada (ou seja, tanto a alimentação da placa de desenvolvimento Duo quanto a conexão USB para TTL com os pinos da placa de desenvolvimento Duo são desconectadas). 

Em seguida, ligue a placa de desenvolvimento Duo e, posteriormente, conecte o dispositivo USB ao TTL aos pinos TXD, RXD e GND na placa de desenvolvimento Duo para habilitar a funcionalidade de login serial. Em seguida, ligue a placa de desenvolvimento Duo e, posteriormente, conecte o dispositivo USB ao TTL aos pinos TXD, RXD e GND na placa de desenvolvimento Duo para habilitar a funcionalidade de login serial.

Atenção! Ao usar o login serial, você deve ligar a placa de desenvolvimento DUO antes de conectar o dispositivo USB ao TTL, pois o pino TXD do dispositivo USB para TTL carrega sinais elétricos. Se você conectar os pinos seriais primeiro e, em seguida, ligar a placa de desenvolvimento DUO, o nível de tensão no pino TXD pode fazer com que o chip opere em baixa tensão, o que pode levar a um tempo errático na interface serial do chip, impedindo o uso normal do dispositivo USB para TTL e causando o acesso remoto 

Seção 4: A Compilação Do Kernel

Meio ambiente Local: Windows 11 de 64 bits

Compilação ambiente: VMware Ubuntu 22.04.4.2

Preparar um cartão uSD de 16GB.

Um MILK-V Duo

1. Configurando o Ambiente de Desenvolvimento:

https://milk-v.blogspot.com/2024/06/gerando-img-para-os-modulo-milk-v-o-sdk_1.html

2. Escrever o Sistema para o Cartão SD:

3. Iniciando o Sistema:

Insira o cartão SD na placa, conecte-a a UART 0 da placa com uma conexão serial TTL (não necessita de energia) e, em seguida, abra a série ferramenta de depuração no computador. Ligar a placa ao computador usando um cabo TIPO  C, e depois de um momento, o sistema deve iniciar.

Por favor, note que esta versão do kernel não incluem  protocolo RNDIS. Portanto, quando você ligar a placa de desenvolvimento DUO  na USB, ele não será reconhecido no gerenciador de dispositivo no seu computador.

Seção 5: Controle de e/s e Iluminando os LEDS no MILK-V Duo (CV1800B, C906 Kernel):

Tutorial de Controle de LED com GPIO no MILK-V

O MILK-V Duo apresenta um LED embarcado conectado para XGPIOC24.

Os módulos relacionados ao GPIO já estão embutidos no kernel, portanto, não há necessidade de executar comandos de carregamento.

Você pode executar operações de entrada e saída no GPIO executando comandos de leitura/gravação GPIO no console ou escrevendo programas de leitura/gravação GPIO no modo kernel ou modo de usuário.

O número do grupo XGPIOC é 416, portanto, o número GPIO é 416+24=440.

Após a inicialização (Boot) e  entrando em  linha de comando, digite os seguintes comandos:

bashCopy codeecho 440 > /sys/class/gpio/export                     # This creates the /sys/class/gpio/gpio440 directory
echo out > /sys/class/gpio/gpio440/direction           # Configure the IO direction as output:
echo 1 > /sys/class/gpio/gpio440/value                 # Illuminate the LED
echo 0 > /sys/class/gpio/gpio440/value                 # Turn off the LED
echo 440 > /sys/class/gpio/unexport                    # Release GPIO resources

Por favor, note que estes comandos permitem que você controle e iluminar o LED da placa de desenvolvimento MILK-V.

1.A implementação do piscar de LED usando um Script de Shell:

Os comandos acima permitem que você controle o estado de um LED no shell bash. Agora, vamos criar um shell script para implementar o LED está piscando com base em comandos acima.

Crie um .sh arquivo chamado led_blink.sh.
Na imagem oficial fornecida, usar o built-in VI editor vi insira o código a seguir:

#!/bin/bash
LED=440
# Activate GPIO-LED
echo $LED > /sys/class/gpio/export
# Set GPIO-LED
echo out > /sys/class/gpio/gpio$LED/direction
# Loop 10 times: Turn on LED, delay for 1 second, turn off LED, delay for 1 second
for i in $(seq 1 30)
do
  echo 1 > /sys/class/gpio/gpio$LED/value
  sleep 0.4
  echo 0 > /sys/class/gpio/gpio$LED/value
  sleep 0.4
done
# Cleanup GPIO
echo $LED > /sys/class/gpio/unexport

Depois de escrever, salvar e sair (:wq). Você pode executar o script diretamente: /root/led_blink.sh

Se você deseja que o LED para de piscar automaticamente após a inicialização (como um indicador de status do sistema), você pode usar o vi para adicionar /root/led_blink.sh & o /mnt/system/auto.sh arquivo de script, como mostrado abaixo:

2.A implementação do  piscar do LED usando Cross-Compiler em Linguagem C:

Digite no sistema Duo e execute cat /proc/version

A partir deste, é evidente que a imagem oficial do sistema do MILK-V Duo usa o riscv64-unknown-linux-musl-gcc. (Quando compilar no host, você deve especificar este compilador, ou o código compilado não funcionará no alvo (target)).

Escreva em linguagem C o código:
No ambiente de desenvolvimento host  do MILK-V Duo, crie o diretório correspondente e escreva led_blink.c.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <string.h>

// GPIO Pin Definitions
#define SYSFS_GPIO_EXPORT "/sys/class/gpio/export"
#define SYSFS_GPIO_UNEXPORT "/sys/class/gpio/unexport"
#define SYSFS_GPIO_RST_PIN_VAL "440"
#define SYSFS_GPIO_RST_DIR "/sys/class/gpio/gpio440/direction"
#define SYSFS_GPIO_RST_DIR_VAL "out"
#define SYSFS_GPIO_RST_VAL "/sys/class/gpio/gpio440/value"
#define SYSFS_GPIO_RST_VAL_H "1"
#define SYSFS_GPIO_RST_VAL_L "0"

int main()
{
    int fd;
    int count = 30;

    // Open the GPIO port: /sys/class/gpio# echo 440 > export
    fd = open(SYSFS_GPIO_EXPORT, O_WRONLY);
    if (fd == -1)
    {
        printf("Error: Failed to open export.\n");
        return EXIT_FAILURE;
    }
    write(fd, SYSFS_GPIO_RST_PIN_VAL, sizeof(SYSFS_GPIO_RST_PIN_VAL));
    close(fd);

    // Set the GPIO pin direction: /sys/class/gpio/gpio440# echo out > direction
    fd = open(SYSFS_GPIO_RST_DIR, O_WRONLY);
    if (fd == -1)
    {
        printf("Error: Failed to open direction.\n");
        return EXIT_FAILURE;
    }
    write(fd, SYSFS_GPIO_RST_DIR_VAL, sizeof(SYSFS_GPIO_RST_DIR_VAL));
    close(fd);

    // Output reset signal: Pull high >100ns
    fd = open(SYSFS_GPIO_RST_VAL, O_RDWR);
    if (fd == -1)
    {
        printf("Error: Failed to open GPIO.\n");
        return EXIT_FAILURE;
    }
    while (count)
    {
        count--;
        write(fd, SYSFS_GPIO_RST_VAL_H, sizeof(SYSFS_GPIO_RST_VAL_H));
        usleep(1000000);
        write(fd, SYSFS_GPIO_RST_VAL_L, sizeof(SYSFS_GPIO_RST_VAL_L));
        usleep(1000000);
    }
    close(fd);

    // Close the GPIO port: /sys/class/gpio# echo 440 > unexport
    fd = open(SYSFS_GPIO_UNEXPORT, O_WRONLY);
    if (fd == -1)
    {
        printf("Error: Failed to open unexport.\n");
        return EXIT_FAILURE;
    }
    write(fd, SYSFS_GPIO_RST_PIN_VAL, sizeof(SYSFS_GPIO_RST_PIN_VAL));
    close(fd);

    return 0;
}

Para encontrar o compilador correspondente na máquina host, execute o seguinte comando: 
sudo find / -name "riscv64-unknown-linux-musl-gcc"

Compilação para gerar o arquivo executável led_blink usando o seguinte comando: 
sudo /home/jw/duo/cvi_mmf_sdk/host-tools/gcc/riscv64-linux-musl-x86_64/bin/riscv64-unknown-linux-musl-gcc -static -o led_blink led_blink.c

Imagem

Transfira o arquivo executável led_blink para o computador de destino usando SSH. (Nota: a imagem deve suportar RNDIS para que este método funcione. Sistema oficial de imagens a partir de milkv-duo-20230519-1809.a img e versões posteriores vêm com RNDIS funcionalidade embutida.)

Execute o seguinte comando para transferir o ficheiro: 
sudo scp ./led_blink root@192.168.42.1:/root/

Na máquina de destino, conceder permissões de execução para o  arquivo executável led_blink e executar o código.

3.Usando a Biblioteca o Pinpong no terminal MILK-V Duo  para Implementar o piscar do  LED em Python:

O seguinte programa é projetado para uso com a  imagem o Duo-V1.0.4.

Primeiro, pare o de indicador de luz built-in da placa de desenvolvimento MILK-V Duo:

mv /mnt/system/blink.sh /mnt/system/blink.sh_backup && sync
reboot

Editar o .py arquivo para o LED piscar usando o seguinte comando: vi ./test_led.py

Digite o seguinte código:

# Experiment: Control the on-board LED on the UNIHIKER board to blink once every second.
# Wiring: Connect a UNIHIKER main control board to a computer.
import time
from pinpong.board import Board, Pin

Board("MILKV-DUO").begin()  # Initialization, select the board type. If not specified, automatic recognition is performed.
led = Pin(Pin.D0, Pin.OUT)  # Initialize the pin as a digital output

while True:
    led.value(1)  # Set the output to high (LED ON)
    print("1")  # Print a message to the terminal
    time.sleep(0.5)  # Wait for 0.5 seconds to maintain the state
    led.value(0)  # Set the output to low (LED OFF)
    print("0")  # Print a message to the terminal
    time.sleep(0.5)  # Wait for 0.5 seconds to maintain the state

Execute o programa Python:

bashCopy code
python3 ./test_led.py

Seção 6: Usar a Porta Ethernet RJ45:

1.Solde o módulo RJ45 na placa de desenvolvimento MILK-V Duo.

2.Configurar IP Estático no Terminal:

Digite os seguintes comandos:

ifconfig eth0 (Set your own IP address) netmask (Subnet mask)
route add default gw (Your route IP)

O intervalo de endereços IP estáticos da placa de desenvolvimento deve corresponder ao do roteador. Por exemplo, se o IP do roteador for 192.168.0.1, altere apenas o último dígito de 1 para 2-255 (cuidado para não entrar em conflito com outros IPs de dispositivo).

Se não houver mensagens de erro após a configuração, isso significa que a configuração foi bem-sucedida.

(Nota: Depois de configurar o IP estático, a lista de usuários do roteador pode não mostrar necessariamente o novo dispositivo. Para verificar o êxito da configuração, usando um cliente SSH para efetuar login i

3.Acessar o Sistema Usando o Configurado IP Estático através da Porta Ethernet RJ45:

O IP estático configurado acima é 192.168.2.188, e este tutorial usa IP 188 para iniciar sessão no dispositivo.

Os usuários devem fazer com base na sua personalizados IP estático.

(FAQ: nome de usuário é root, senha é milkv)

img

Seção 7: Utilizando a Câmera:

1.Certifique-se de que você pode SSH para o  dispositivo Duo usando um cabo USB de rede (RNDIS).

O padrão de firmware SSH username e password for root/milkv.

2.Baixe o arquivo de teste do pacote a partir do link fornecido

3.Transferi-lo para Duo usando SCP ou qualquer outro método:

scp duo_camera_test_v0.2.tar.gz root@192.168.42.1:/root/

4.Executar o programa:

Inicie a sessão no Duo de terminal:

ssh root@192.168.42.1

Abrir o pacote de teste:

tar zxf duo_camera_test_v0.2.tar.gz -C /

Navegue para o programa de teste de diretório:

cd /mnt/data/install/

Executar o programa de teste para iniciar a transmissão em sequência:

./CviIspTool.sh 64M

Em circunstâncias normais, o terminal irá exibir o seguinte log no final:

VPSS init with src (1920, 1080) dst (1920, 1080).
CVI_VPSS_CreateGrp:0, s32Ret=0
rtsp://127.0.1.1:8554/stream0
prio:0
CVI_RTSP_SERVICE_CreateFromJsonFile[./cfg_64M.json]
[REMOTE] cvi_raw_dump_run,158: raw dump ready...
waiting for connect...

5.Reproduzir o vídeo com o VLC Media Player:

Substitua o IP em links que começam com "rtsp:" com de endereços de IP da Duo . Este será o endereço de streaming utilizada no VLC Media Player.

Por exemplo:

rtsp://192.168.42.1:8554/stream0

Clique em "Play" e você vai ser capaz de exibir o fluxo de vídeo a partir da câmera.

Efeito:

Seção 8:Ativar A Memória Virtual:

A memória Virtual é uma tecnologia de sistema operacional usado para expandir a capacidade de memória física do computador (RAM). Ele faz isso armazenando uma parte dos dados no disco e carregamento de dados ativas a partir do disco para a memória, para atender as necessidades de memória de processos.

1.Memória Virtual oferece as seguintes vantagens:

Expansão da Capacidade de Memória: memória Virtual permite que o sistema operacional para expandir a capacidade de memória utilizável quando a memória física é insuficiente. Ele move-se menos frequentemente usados de dados para um arquivo de swap no disco para liberar mais memória para outros processos.

Permitindo Simultâneas de Execução do Programa: a memória Virtual torna possível executar vários programas simultaneamente. Cada programa é atribuído a uma parte da memória virtual, mesmo se a memória física não é possível acomodar os dados de todos os programas em simultâneo. Isso permite alternar entre programas' o uso da memória através da troca de dados para o disco.

Proporcionar um Maior Espaço de Endereço: memória Virtual permite que cada processo de acesso de um maior espaço de endereço, superando as limitações de memória física. Processos pode-se perceber um bloco contíguo de memória, enquanto os seus dados podem ser distribuídos entre memória física e o disco.

Melhor Gerenciamento de Memória: memória Virtual automaticamente gerencia de paginação de memória (dividindo memória de tamanho fixo páginas), oferece proteção de memória (prevenindo processos de aceder a memória fora dos limites), e implementa mecanismos para o compartilhamento de memória e o mapeamento de memória, entre outros.

Memória Virtual oferece vantagens significativas na extensão de memória e multitarefa, mas também introduz overhead de desempenho e complexidade. Em sistemas de computadores modernos, a memória virtual é um componente indispensável amplamente utilizado em vários sistemas operacionais.

2.Ativar a Memória Virtual no MILK-V Duo:

Antes de a utilizar, certifique-se de que o MILK-V Duo está usando a imagem do sistema Duo-V1.0.4 (Código de Extração: jwz0) ou acima.

Digite os seguintes comandos no terminal:

mkswap /dev/mmcblk0p3 swapon /dev/mmcblk0p3

Use free -h para verificar se a memória virtual está activada.


A SMARTCORE FORNECE CHIPS E MÓDULOS PARA IOT, COMUNICAÇÃO WIRELESS, BIOMETRIA, CONECTIVIDADE, RASTREAMENTO E AUTOMAÇÃO. NOSSO PORTFÓLIO INCLUI MODEM 2G/3G/4G/NB-IOT, SATELITAL, MÓDULOS WIFI, BLUETOOTH, GPS, SIGFOX, LORA, LEITOR DE CARTÃO, LEITOR QR CCODE, MECANISMO DE IMPRESSÃO, MINI-BOARD PC, ANTENA, PIGTAIL, BATERIA, REPETIDOR GPS E SENSORES.