domingo, 20 de julho de 2014

Eagle PCB

Instalação do Eagle PCB no Fedora 20 (64-bits)


É necessário instalar alguns pacotes para dar suporte à execução de binários de 32 bits:
sudo yum install libstdc++.i686 libXrender.i686 libXrandr.i686 libXcursor.i686 freetype.i686 fontconfig.i686 libXi.i686 openssl-libs.i686

De seguida é necessário criar links simbólicos para algumas bibliotecas:
cd /usr/lib/
sudo ln -s -T libssl.so.10 libssl.so.1.0.0
sudo ln -s -T libcrypto.so.1.0.1e libcrypto.so.1.0.0 

Por fim depois de fazer o download do ficheiro de instalação do Eagle PCB a  partir do site basta executar o ficheiro run:
chmod +x eagle-lin-7.0.0.run
sudo ./eagle-lin-7.0.0.run

quinta-feira, 10 de julho de 2014

GNU Toolchain ARM Cortex-M (64bits)

Ambiente de Desenvolvimento para Cortex-M

Hoje decidi reinstalar o meu computador com o Fedora 20 64-bits, e decidi escrever de forma muito simples os passos para criar o ambiente de desenvolvimento para a minha placa actual (stm32f4 discovery).


GNU Toolchain ARM


Para executar os binário da GNU Toolchain ARM é necessário dar suporte a 32-bits, a instalação dos pacotes a baixo permite ao sistema operativo correr binários de 32-bits.
yum install glibc.i686
yum install ncurses-libs.i686

A toolchain da GNU está disponível para vários sistemas operativos e disponibiliza também as fontes, sendo o Fedora um sistema operativo baseado em unix vamos fazer o download última versão para Linux. Dentro da hierarquia de pastas do sistema Linux existe a "/opt" que é dedicada ao colocar software de terceiros, addons, etc por isso é um óptimo lugar para colocarmos as nossas ferramentas de forma arrumadinha.


Insight Debugger


Um programa de debug faz muita falta e esse não podia ficar esquecido, decidi instalar o Insight mais uma vês foi colocado na pasta "/opt". Antes de conseguir executar o insight é necessário instalar algumas dependências:

yum install libX11-devel.i686
yum install zlib-devel.i686
yum install expat-devel.i686





OpenOCD

Antes de compilar e instalar o openocd é necessário instalar algumas dependências:

yum install gcc
yum install git libtool autoconf texinfo libusb-dev
yum install libftdi

Depois das dependências instaladas é preciso fazer o download as fontes compilar e instalar, mais uma vez será instalado na pasta "/opt".


git clone git://openocd.git.sourceforge.net/gitroot/openocd/openocdcd openocd ./bootstrap
./configure --enable-maintainer-mode --disable-option-checking --disable-werror --prefix=/opt/openocd --enable-dummy --enable-usb_blaster_libftdi --enable-ep93xx --enable-at91rm9200 --enable-presto_libftdi --enable-usbprog --enable-jlink --enable-vsllink --enable-rlink --enable-stlink --enable-arm-jtag-ewmakesudo make install


UDEV

Para se conseguir executar  o openOCD sem acesso root basta:

sudo cp /opt/openocd/share/openocd/contrib/99-openocd.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
usermod -a -G plugdev <utilizador>

Adicionar ao PATH

Para facilitar o desenvolvimento adicionei as pastas "bin" que contêm os binários ao PATH de modo a que possa ser chamado a partir de qualquer directório. A forma mais fácil é editar o script ".bashrx" onde é possível definir caminhos para ficheiros e funções do utilizador.





Downloads:

--


Referências:



quinta-feira, 3 de julho de 2014

Mini STM32 v3.0 - ChibiOS

Placa de desenvolvimento Mini STM32 v3.0 + Display de 2.8" + touchscreen + SD Card breakout.

Mais um update ao desenvolvimento para esta placa, apesar da ST fornecer já um biblioteca com drivers para esta placa é muito mais simpático programar com um RTOS (Real Time Operating System) que basicamente é um sistema operativo destinado a execução de várias tarefas capaz de responder a eventos quer externos quer internos.

Apesar de já ter utilizado outros RTOS, actualmente utilizo o Chibios vister ter boa documentação implementado de uma forma, pode se dizer, bonita, ter HAL integrado, ter outros projectos opensource integrados e fácil desenvolvimento quer de aplicações quer de novas funcionalidades.


O ChibiOS tem a seguinte estrutura:


Não vou entrar em muitos detalhes acerca do conteúdo de cada pasta, mas é pesquisando no site do ChibiOS facilmente encontram boa documentação.

Neste momento utilizo a versão 2.7.0 unstable e para utilizar esta placa tive que criar um nova board nas fontes do ChibiOS. Portei de uma board já existente e adaptei a minha placa tendo em conta o manual e os shcematics da placa.

De seguida criei um demo para esta placa e testei a parte do sistema operativo.


Resultado Final:

*** ChibiOS/RT test suite
***
*** Kernel:       2.7.0unstable
*** Compiled:     Jul  3 2014 - 12:30:48
*** Compiler:     GCC 4.8.2 20130624 (prerelease)
*** Architecture: ARMv7-M
*** Core Variant: Cortex-M3
*** Port Info:    Advanced kernel mode
*** Platform:     STM32F10x Performance Line Medium Density
*** Test Board:   Mini stm32 v3.0

----------------------------------------------------------------------------
--- Test Case 1.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Mutexes, priority inheritance, simple case)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Mutexes, priority inheritance, complex case)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.5 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.6 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.7 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.8 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Benchmark, messages #1)
--- Score : 129511 msgs/S, 259022 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Benchmark, messages #2)
--- Score : 101477 msgs/S, 202954 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.3 (Benchmark, messages #3)
--- Score : 101477 msgs/S, 202954 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.4 (Benchmark, context switch)
--- Score : 447056 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.5 (Benchmark, threads, full cycle)
--- Score : 73509 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.6 (Benchmark, threads, create only)
--- Score : 113172 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 28169 reschedules/S, 169014 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.8 (Benchmark, round robin context switching)
--- Score : 241560 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.9 (Benchmark, I/O Queues throughput)
--- Score : 410168 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.10 (Benchmark, virtual timers set/reset)
--- Score : 345800 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.11 (Benchmark, semaphores wait/signal)
--- Score : 455580 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.12 (Benchmark, mutexes lock/unlock)
--- Score : 518076 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.13 (Benchmark, RAM footprint)
--- System: 468 bytes
--- Thread: 72 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 16 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------

Final result: SUCCESS



Downloads:


Referências:

quarta-feira, 2 de julho de 2014

Mini STM32 v3.0 - Debug

Placa de desenvolvimento Mini STM32 v3.0 + Display de 2.8" + touchscreen + SD Card breakout.

Na continuação do desenvolvimento para esta placa.


Debugger

Para fazer debug é necessário um hardware debugger:
  • JLink
  • ULink
  • ST-Link
Qualquer hardware debugger é compatível o que pode variar é a compatibilidade com o software de debug. Como não dispunha de nenhum hardware debugger utilizei uma stm32f4 discovery que tem um st-linkv2 integrado e permite programar e fazer debug a outros chips da ST.


Stm32f4Discovery
STM32F4 Discovery


Remover os dois jumpers para utilizar como programador externo.











Pinout SWD da placa stm32f4discovery:




Pinout JTAG da placa Mini STM32 v3.0:




Quadro resumo das ligações


FunçãoStm32f4 DiscoveryMini stm32 v3.0
VDD11
SW_CLK29
GND34
SWDIO47
NRST515
SWO------



Programação através do OpenOCD




Ficheiro de configuração do OpenOCD




Debug através de arm-none-eabi-insigth









Referências:

Mini STM32 v3.0


Placa de desenvolvimento Mini STM32 v3.0 + Display de 2.8" + touchscreen + SD Card breakout.


Display 2.8 + touchscreen + SD Card breakout
Mini STM32 v3.0

Especificações:

CPU: ARM Cortex-M3 (STM32F103RBT6) @ 72MHz;
FLASH: 128 Kb
RAM: 20 KB

1 x Interface de debug JTAG
2 x LED vermelhos de uso genérico
1 x USB to RS232 (PL2303) permite programação por ISP
1 x USB2.0 Device mode interface.
1 x Potenciómetro
4 x Botões ( 2 x Genéricos; 1 x BOOT0; 1 x RESET)
1 x RTC (permite bateria de back-up)

2.8" TFT (260K 240*320 Color) with Touch Panel V2.0
SD Card breakout
Suporta DATAFLASH ( não incluído )
Suporta 16/8 Bits ( Default: 16 bits )
Painel touchscreen + controlador.


Placa: 82mm x 68mm



Material incluído:

1 x Mini STM32 Board                    
1 x 2.8" LCD + touchscreen + SD Card breakout        
1 x Cabo mini USB                     
2 x CD ROM( software, schematic, exemplos, drives, documentos ) ( Chinês )




Programação ( ISP )

A placa vem inicialmente programada com um programa de testes baseado no uCOSII/uGUI o que permite verificar o bom funcionamento da placa bastando ligar um cabo mini USB a qualquer uma das USBs disponíveis.


Mas para quê ter uma placa de desenvolvimento se não a consigo programar?

A documentação fornecida nos CDs é bastante fraca no sentido que a maioria é escrita em chinês e existe muito pouca informação na internet, decidi fazer esta aquisição por necessidade de um display com touchscreen e pelo preço do conjunto compensou esta compra.

Esta família de microcontroladores STM32F1x tem um bootloader que permite a programação por ISP, no caso deste STM32F103RBT a programação é baseada no UART1 que vem já ligado a USB(J3) e com um conversor USB-RS232 permitindo assim programar a placa por USB e comunicar via canal série.


O software oficial da ST ( Flash Loader Demonstrator ) existe apenas para o sistema operativo windows e nem em Windows funcionou no meu caso. Fiz um pesquisa no google encontrei um projecto em C (stm32ld) fiz uma pequena alteração e tudo ficou a funcionar perfeitamente.

STM32 Load Firmware recebe como parâmetros:

  • porta série
  • baud rate
  • ficheiro *.bin
  • restet depois carregar
Antes de carregar para a placa é necessário arrancar o bootloader para tal é necessário manter premido o botão BOOT0 e depois de RESET.


Os programas de teste fornecidos no CD vêm no formato *.hex, contudo é possível converter para *.bin facilmente:




Downloads:





Referencias: