University Programs Knowledge Base

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

University Programs Knowledge Base

Discussions

Sort by:
INTRODUCTION Hi everyone, Making/Developing/Porting a Bootloader is a tedious task for newbies (even for professionals) and inexperienced hobbyists who wish to use them on their custom hardware for rapid prototyping. After searching a lot on different forums I came to a conclusion that I cant develop a bootloader just like that so my next option was porting ,that too wasnt easy if you are going with old bootloaders with limited support. I then found a very easy and efficient way of rapid software development platform that can be used on almost any IDE (Keil,Codewarrior,KDS,etc.) and can be used to develop softwares like USB MSD Bootloaders,Serial Bootloaders and other applications for almost all Freedom Development Boards ,Freescale Kinetis MCUs (on a Custom Development Board ) with minimal ARM Programming Knowledge, which is perfect for newbies like me who are just starting with ARM Development using freescale or other boards.See Welcome to the homepage of the µTasker operating system with integrated TCP/IP stack, USB and target device simulator Now my project was to make custom board using MK22DX256VLF5 (48 LQFP) MCU ,my board is a rather a simple one using basic filtering circuits for powering the MCU and almost all the pinouts given as hardware pins on the dev board.Somehow I was able to flash my first blink code using Keil IDE using the OpenSDA circuitry of FRDM-KL25Z (J-11 trace cut ) with CMSIS-DAP firmware (OpenSDA app ) loaded on to it using SWD Programming. With the steps mentioned below I'll show you how to port a Mass Storage Device (MSD) Bootloader using uTasker project from scratch. REQUIREMENTS Programmer(Hardware) or Emulated Programmer(OpenSDA apps): Segger Jlink, P&E Multilink ,OpenSDA Emulators (Jlink-SDA, CMSIS-DAP,USBDM ) IDE :Keil,Codewarrior, Kinetis Design Studio etc. (I prefer CW 10.6 ) Target MCU: Choose any MCU between Kinetis,Coldfire V2,STM32  (I am using Freescale Kinetis MK22DX256VLF5 ,48 LQFP ) refer - http://www.utasker.com/ PROCEDURE 1. Lets start by downloading the uTasker project/framwork (for Kinetis ) from µTasker Kinetis Developer's Page . Then extract and copy the folder to your CW workspace ,import the project to CodeWarrior IDE, It should look like this. (I am using version 14-9-2015)   2.Next Select "uTaskerSerialLoader_Flash" from the Five build configurations (refer http://www.utasker.com/docs/uTasker/uTaskerSerialLoader.PDF  ).uTaskerBM_Loader is described in http://www.utasker.com/docs/uTasker/uTasker_BM_Loader.pdf This is a very small loader alternative that works together with an initial application. uTaskerV1.4_BM_FLASH is the application to build so that it can be loaded to a loader (including the USB-MSD one). uTaskerV1.4 is a 'stand-alone' version of the application that doesn't work together with a loader (and doesn't need a loader).If you want to build application to load using the USB-MSD loader you need to use uTaskerV1.4_BM_FLASH. after that find the files config.h and ap_hw_kinetis.h.These files define the type of MCU you use. 3.In config.h Select your board or MCU type or the closest MCU resembling the architecture of your own MCU. My MCU  MK22DX256VLF5 was not there so with a little help from mjbcswitzerland  I chose TWR_K21D50M Board settings as TWR-K21D50M module is a development board for the Freescale Kinetis K11, K12, K21 and K22 MCUs. (Note : Be sure to remove or comment any other defined boards ) After Selecting the Board/MCU scroll down to find USB_INTERFACE and USB_MSD_LOADER and make sure that these two are defined (not commented ).This is necessary to enable USB enumeration as Mass storage device. Also comment the following if already defined : HID_LOADER KBOOT_HID_LOADER USB_MSD_HOST This is necessary as we are using our Bootloader in MSD Device Mode not in MSD Host Mode. Also we arent using HID_LOADER and KBOOT. Now open  ap_hw_kinetis.h and Find your selected MCU (in my case its TWR_K21D50M ) So, Find the String "TWR_K21D50M" (or whatever your MCU is ) and see if the follwing lines are defined. #define OSC_LOW_GAIN_MODE #define CRYSTAL_FREQUENCY    8000000  #define _EXTERNAL_CLOCK      CRYSTAL_FREQUENCY #define CLOCK_DIV            4                                      or    #if(..........)         #define CLOCK_MUL        48                                            #define SYSTEM_CLOCK_DIVIDE 2                                      #else         #define CLOCK_MUL        24 #endif     #define USB_CLOCK_GENERATED_INTERNALLY Here comes an integral part of USB MSD Bootloading/Programming.You must be wondering about CRYSTAL_FREQUENCY  8000000 and  CLOCK_DIV   4  .This is the frequency of an external crystal oscillator  (8mhz) connected between EXTAL0 and XTAL0 pins of the Target MCU.If your MCU has an internal oscillator then check whether the latter is defined. refer- https://cache.freescale.com/files/microcontrollers/doc/app_note/AN4905.pdf          http://www.utasker.com/kinetis/MCG.html There are two ways to be able to use USB: 1. Use a crystal between EXTAL0 and XTAL0 - usually 8MHz is used. (with or without load capacitor -both worked for me ) 2. Use a 48MHz oscillator on the USB-CLKIN pin. First one is easier and it worked for me.Since my MCU doesnt have an internal oscillator I have used and External 8Mhz crystal. If you want to use a 16Mhz crystal then just make the following changes : #define CRYSTAL_FREQUENCY    8000000 #define _EXTERNAL_CLOCK      CRYSTAL_FREQUENCY #define CLOCK_DIV            4                                 TO #define CRYSTAL_FREQUENCY    16000000 #define _EXTERNAL_CLOCK      CRYSTAL_FREQUENCY #define CLOCK_DIV            8 Note: The CLOCK_DIV should be such that it prescales the crystal frequency to range of 2-4MHz. Here is the clocking diagram of My MCU.The next diagram shows an oscillator crystal connected externally to my dev board. Next search for "PIN_COUNT" under your corresponding MCU/Board (mine is TWR_K21D50M).My MCU is 48 LQFP with 256kb flash and 32kb SRAM (you have to change them according to your MCU ).So I have changed the following lines                              from   #define PIN_COUNT           PIN_COUNT_121_PIN                         #define SIZE_OF_FLASH       (512 * 1024)                          #define SIZE_OF_RAM          (64 * 1024)                              to   #define PIN_COUNT           PIN_COUNT_48_PIN                      #define SIZE_OF_FLASH       (256 * 1024)                              #define SIZE_OF_RAM          (32 * 1024)  Next if you search for your MCU/Board (in this case TWR_K21D50M) ,you will find this line : #define UART2_ON_E This defines the alternative port for UART2,since many boards doesnt have PORTE ,it can be chaned to other ports. [its not important though] Note : When building the serial loader for a device with small RAM size reduce the define #define TX_BUFFER_SIZE (5512) to 512 bytes so the buffer can be allocated (the large size was used only for some debugging output on a larger device) [loader version :14.9.2015] Now search for the String "BLINK_LED" under your corresponding MCU/Board ( mine is TWR_K21D50M ) .The uTasker Bootloader has a special function ,whenever it is in MSD/LOADER mode it blinks a test LED on the board.This is not important but it can be used for debugging purposes.I have a test LED on my board at PORTB16 .You can also specify hardare pins to force bootloader mode and to stop watchdog timer if you pull SWITCH_3 and SWITCH_2 down to ground respectively.I am setting SWITCH_3 and SWITCH_2 as PORTD7 and PORTD6 respectively. Now on the toolbars go to Project > Properties > C/C++ Build > Settings > Tool Settings > Target Processor :Change it to your MCU type (mine is cortex-m4 ) .Next go to Linker >General and change the linker script file to match your MCU's flash,RAM,Type.I have set mine to K_256_32.ld (Kinetis K type processor with 256kb flash and 32 kb RAM) Apply your changes.Now you are ready to go. 4.  Build your project under SerialLoader_FLASH configuration .If there are no compilation errors then you have done it! (if there are then recheck everything with this guide ) Now Click the Flash programmer icon a and Select Flash File to Target. (if your not getting the icon switch to "DEBUG" perspective view ) Now you may choose your Programmer (or emulated programmer )[connection tab] ,select the correct Flash configuration file ,then browse for the binary file that has been generated under C:\Users\<computer user>\workspace\Kinetis_14-9-2015\Applications\uTaskerSerialBoot\KinetisCodeWarrior\uTaskerSerialBoot_FLASH\uTaskerSerialBoot.bin and Click on "Erase and Program". You may skip Step 5 and go to Step 6. 5.I am using the OpenSDA circuitry of my FRDM-KL25Z (J-11 trace cut ) as a programmer using J-link OpenSDA app. Download the app from SEGGER - The Embedded Experts for RTOS and Middleware, Debug Probes and Production Programmers - OpenSDA / OpenSDA V2 depending on your OpenSDA version (FRDM KL25Z has OpenSDAv1). Refer - Using the Freedom Board as SWD Programmer | MCU on Eclipse 5.1.First Enter bootloader mode and Flash the Jlink sda app into it.Connect the SWD wires from the board to your  Target MCU/Board ,also connect the target board        to the external oscillator.Also connect the FRDM's OpenSDA through USB. (A drive with the name JLINK Should come )                                          5.2. Go to Flash File to target and under connections tab click new. give any name and click new under Target Tab.Then select the target type (your target MCU ,mine is                      K22DX256M5).Then check Execute Reset under Initialization Tab. Click finish.    Now you'll get the option to select connection type ,then choose J-Link/J-Trace for ARM and change the Debug port interface to SWD .If you get the error :connection name is not        unique then just change the name (I have used jlink1).Click Finish.     Now I have set up my connections so I can flash the MCU with Jlink app on my OpenSDA circuitry. 6. Now to verify USB Enumeration of your Custom Board ,connect it to PC using USB and you should get a drive with the name UPLOAD_DISK.
View full article
Freescale Cup 2016 Worldwide Rules
View full article
EGR280 sophomore design and ECE470/570 Microprocessor based system design at Oakland University (in South East Michigan). Using CW HC12(x) special edition and Wytec Dragon12 dev boards.
View full article
Footage from the technical inspection taken during The Freescale Cup 2015 Worldwide Finals. Credit: Fraunhofer IIS         
View full article
Video footage highlights taken during The Freescale Cup Worldwide Finals 2015 Award Ceremony Credit: Fraunhofer IIS
View full article
Footage highlights of the Freescale Cup Worldwide finals race 2015. Credit: Fraunhofer IIS
View full article
Compilation of views taken during The Freescale Cup 2015 Worldwide Finals held at the Fraunhofer IIS during the event opening. Credit: Fraunhofer IIS
View full article
Footage taken using the Fraunhofer IIS Eagle Cam attached to the Car from the Politecnico of Torino on the final track layout. Credit: Fraunhofer IIS
View full article
Watch the video highlights of the Freescale Cup Worldwide Finals 2015 for the training sessions. Credit: Fraunhofer IIS
View full article
On September 14-15, 2015, The Freescale Cup Worldwide Finals will be held at the Fraunhofer Institute of Integrated Circuits (Fraunhofer IIS) in Erlangen, Germany You can follow along and see the regional champion teams from South Korea, China, India, Taiwan, Malaysia, Mexico, Brazil, USA and Switzerland train and compete for the World Title. Agenda of the event covered by the LiveCast is (all times are Central Europe Time): September 14th 14:00 - 15:00 Opening Ceremony 15:00 - 17:30 Training Session 17:30 - 18:00 High Schools and Innovation Challenge Demonstrations September 15th 9:00 - 13:00 Training Session 13:00 - 14:30 Technical Inspection and preparation for the Finals Race 14:30 - 15:00 Finals Race 15:00 - 15:45 Preparation for the Awards 15:45 - 17:30 Awards Ceremony Download and print the attached poster with the embedded QR-Code for posting the link of the LiveCast Direct LiveCast URL is http://www2.iis.fraunhofer.de/freescale
View full article
A tomada inteligente segue a filosofia proposta pelo protocolo internacional de medição e verificação (PIMVP) que diz “não gerenciamos aquilo que não medimos”. Porém, nem sempre temos um equipamento acessível ou recurso adequado para isso. A proposta da tomada é fornecer aos usuários um sistema de medição e controle sem a necessidade de grandes investimentos. O adaptador de tomada inteligente possui um circuito de medição de corrente elétrica e um circuito para medição da tensão elétrica presente na tomada. Estas informações são, inicialmente, armazenadas em na memória interna da tomada. Um aplicativo desenvolvido para dispositivos Android se comunica com a tomada, através da rede wireless da residência. Link do dropbox para acessar arquivos: Dropbox - Tomada Inteligente
View full article
Feel free to print or post this poster on your bulletin boards to promote the registrations for The Freescale Cup EMEA 2016!! Should you need customisation for your school or university, please contact me
View full article
This guide provides all the participants of the Freescale Cup finals with the key information to get organised during the event. This is the final version
View full article
Model provided by the Mathworks Academic support team to manage wide angle lenses on the default Freescale Cup car camera.
View full article
See how Sylvain got a position at NXP.
View full article
TFC2015 UCDavis Team Chucksgon Final Report Thanks for sharing Lance Halsted​
View full article
TFC2015 UCDavis Team DKnight Final Report Thanks for sharing Lance Halsted
View full article
TFC2015 UCDavis Team The One Final Report Thanks for sharing Lance Halste
View full article
TFC2015 UCDavis Team Young Tortoise Final Report Thanks for sharing Lance Halsted​
View full article
Data acquisition system for Kinetis K Family Author : Mauro Padin (Student) Supervisors : Professor Daniel A. Jacoby, Juan Pablo Vega (Teacher Assistant)   Summary:   This project is based on the FRDM-K64F board, a HC-05 Bluetooth module, and a smartphone. In this application, an analog signal is sampled and transmitted wirelessly to a smartphone, using an external Bluetooth module, where it is displayed. The complete CodeWarrior C code and MIT App Inventor code can be found in the .zip file. System Structure SysTick Module: Periodically triggers ADC conversions and UART transmissions. ADC Module: Samples the analog signal and manages the ADC input buffer. UART Module: Manages the UART output buffer and transmits the digitized data. Bluetooth Module: When connected, wirelessly transmits the data coming from the UART module. Smartphone App: Handles Bluetooth connection, receives the digitized data and manages the display.   Software Structure   A project template is provided to the students in order to establish a simple, and easy, program organization for the duration of the course. A portion of the template was built with the help of the Processor Expert so that, later on, the students would be able to understand its structure and limitations, and transition to this new tool. A wrapper was built around this auto-generated code and the resulting function, void __LDM_init (void), is to be used at the very beginning of the project given. This function mainly configures internal processor registers related to clock configuration.   The project is composed of separate files for each hardware and software module:   The template is composed of four files: LDM.c/h, main.c, and misc.h. The application is found in: App.c/h RTI, ADC, UART, LED Drivers are defined in: RTI.c/h, adc.c/h, uart.c/h, and LED.c/h.   The basic Driver structure consists of a void DRV_init(void) initialization, a set of void DRV_x_ISR(void) interrupt handlers, a set of void DRV_x_PISR(void) periodic interrupt handlers, and a set of void DRV_x services function. Only the initialization function is mandatory, the others being optional and dependent on the driver purpose. Service functions are interfaces between the application and the Driver and do not necessarily access any subjacent hardware. Indeed, this Driver structure can be nested and thus not handle any hardware at all. When a Driver function does access hardware, it is recommended to further use a Hardware Abstraction Layer to enhance productivity and improve portability.   Extracts of the system   As an example of the Driver Structure, the LED Driver is described below:   init void LED_init  (void)   ISR N/A   PISR void LED_PISR  (void)    Services void LED_write  (color_t color, bool value) void LED_set  (color_t color) void LED_clear  (color_t color) void LED_toggle (color_t color)   The entire application is interrupt driven, so that only initialization are necessary and the run loop is empty:   void App_init(void) {   LED_init();  // LED driver init function   uart_init();  // UART driver init function   adc_init();  // ADC driver init function   RTI_init();  // RTI driver init function }   void App_run(void) { }       Hardware interrupts are not serviced in their specific handler but referred to external handlers for readability and organization. The SysTick interrupt handler is composed of a ISR and a Service:   ISR_t SysTick_Handler(void) {   LED_isr code   ADC_conv code } The code for the smartphone side is depicted below:     Finally, a screenshot of the result:       Original Attachment has been moved to: -ADC-bluetooth-TP6.zip
View full article