Brown-out detection and frequency are two independent things. Another core aspect to consider is the operating voltage. Your operating voltage determines possible frequencies (higher voltage allows higher frequency, but nothing stops you from using max voltage with the lower freq of course).
BOD is nothing more but a voltage at which the MCU will stay in ...
Looking at the .ld file (linker script) we can see
__DATA_REGION_ORIGIN__ = DEFINED(__DATA_REGION_ORIGIN__) ? __DATA_REGION_ORIGIN__ : 0x800200;
which seems to not agree with your desired .data=802200 on the command line. You can trace the path from __DATA_REGION_ORIGIN__ to .data in the .ld script itself.
Which suggest you can set ...
Yes i do have a bootloader. and the corruption happens on the first lines mainly (1st to 8th line of the flash)
If your micro-controller has a bootloader then that means it has the ability to program it's own flash under software control. Furthermore it has code in the program memory that was designed to write the flash.
If you allow a processor to run ...
You do have a timing problem, but should be easy to fix.
First a suggestion - why do you need that ATTINY at all? Why not drive the Neopixel directly from the Arduino? There are lots of code examples that will work out of the box, including the popular Adafruit library.
If you really need to get the ATTINY driving the Neopixels then you will need to get your ...
To save power and work at the lowest possible supply voltage, use a slowest possible frequency.
Since most important stuff you are doing is UART comms, select a crystal that suits best for the job, like 3.6864 MHz, which happens to provide the exact frequencies within the crystal tolerance.