Hello everyone,
Up to now, I have been programming 8 bit AVRs (in C). I now ordered Raspberry Pi and I want to switch on to a little more advanced chips (eg. ARM in RPi and AVR32).
I have trouble understanding how all the "more advanced" chips work and how they are programmed.
This is what I know (or I think is true):
I know that to get a microcontroller to work, I need to write a program on the computer and program the device through a programmer.
This also applies to 32-bit microcontrollers (many of which are ARM based). In this case, apart of boot-loading or company specific port, only JTAG would program the device.
ARM is just an architecture, or a "template" to some extend, that gives base to uC's and so there are many different companies making their 32bit around ARM.
Above ARM and 32 bit uC are Embedded solutions, eg. SoC's which are a composition of at least one microcontroller inside (commonly ARM), some flash, RAM, ROM, GPU optionally, etc.
SoC's are good to run a simple OS like Linux. A GPU is a separately programmable part of an SoC.
CPU is not a microntroller, is very fast and does the instructions which are given it.
JTAG is a universal device that can debug and programm all JTAG supportive devices, given I have appropriate software.
Now things I don't understand:
SoC's have a microcontroller inside them, so they must be programmable, but are they all like that? Does an SoC have a program stored in it's flash, that it fetches instructions from, just like an 8bit?
Something must take files from an SD card and run them in a Raspberry Pi, something must tell the GPU inside what display interface to use etc, but I can't find a source code, or an evidence of a program being run inside a SoC.
How is it really happening? (1)
About CPUs, I think they are not programmable, so they are supported by BIOS that fetches the initial instructions from HDD boot section and the CPU automatically performs all what is given to it, and so, the motherboard has to take care of all the results the CPU "throws out".
Is this really what is happening? (2)
About JTAG. It is mainly a test solution for debugging etc, but one of its uses is accessing the memories of a micronotroller, so they can be therefore programmed. But then why are there so many different JTAGs on the market?
Why isn't one JTAG IEEE 1149.1 compatible with ALL the chips? The instructions are universal, aren't they? Why is there a special JTAG for AVR32 and a different one for Xilinx? (3)
I am sorry to ask so many questions, but I really couldn't find very much information about those and I think a discussion like this would help people by bringing these answers in one place. I have numbered three distinct issues.
If there is something I misunderstand in the first part, please tell me as it may be trivial to some people, but not as such to me.
Thanks,
Wojciech