As result it takes a lot of time to download. Are there any ways to minimise download code size?
Are you sure it's 2K? Note that the Windows explorer shows file sizes in multiples of the disk's cluster size - so even a 1-byte file may be shown as 2K!
main function starts at address 800h that is 2k. Converting it to bin and back results in 2k size. Can I change this base?
Then you need to implement a HEX loader. HEX files contain start addresses and check sums (a 100 Bytes Binary will then be about 300 Bytes, but still a lot smaller than 2K). HEX file format is described under: http://www.keil.com/support/docs/1584.htm
Of cource, I've implemented hex loader. However, the tusb3210 MCU requires header to be added to the single code segment. Therefore, I cannot load only those segments of code that will be executed. I also need to download 2k of NOPs. Why keil reserves them and how to get rid of them configuring copiler?
Finally we get to the real question. Of course, nobody can read your mind.
I also need to download 2k of NOPs. Why keil reserves them and how to get rid of them configuring copiler? It sounds like you are using the FREE evaluation compiler. It has certain limitations including code size and program starting address restrictions. If you want an unrestricted version, contact your Keil distributor and they will be happy to assist you. Jon