Эх, молодежжж

Забыли про Pascal Stang и его замечательную библиотеку AvrLib. В приложенном архиве 4 файла.
spiflash.c и spiflash.h - готовая либа для работы с spiflash.
Взята из вышеупомянутой библиотеки, слегка доработана напильником

, в частности дописаны функции spiflash_WriteProtect() и spiflash_GlobalWriteProtect(), думаю не требует поснения, для чего они нужны (даташит, надеюсь, хоть пролистывался?)
Библиотека нацелена на аппаратный SPI, но легко может быть переделана на софтверный заменой функций spi_init() и spi_transfer() на ваши, собственные.
Для затравки, прикрепил готовую реализцию от Паскаля (spi.c + spi.h).
Не забудьте поправить эти строки spiflash.h, под ваш hardware
Код
// HW specific constants
#define SPIFLASH_CS_DDR DDRB
#define SPIFLASH_CS_PORT PORTB
#define SPIFLASH_CS_PIN 4
Данная либлиотека обкатана с микросхемами ST M25P28, и Atmel AT25DF321A. С AT45ХХХХ не проверялось, ввиду отсутствия таковых. По идее, они имеют аналогичный алгоритм работы, а если не заработает "в лоб", то достаете напильник, открываете документацию на AT25 и AT45, ищите различия... Я бы сам проверил, но AT45 у меня, к сожалению нет. По крайней мере, у вас уже есть некоторая стартовая площадка

Удачи!
Нажмите для просмотра прикрепленного файла