Судя по Вашим вопросам, Вы не разобрались в работе АТ45, потому что все ответы есть в даташите. И теперь, не разобравшись, Вы пытаетесь написать "свою" библиотеку путем копи-паста из нескольких чужих библиотек. С моей точки зрения, если Вам не хочется разбираться досконально, то надо просто использовать одну из готовых билиотек. А если уж Вы хотите написать что то своё, то надо пересилить себя и прочитать даташиты (на АТ45, на контроллер, а может еще и на интерфейс SPI), а некоторые его места прочитать по нескольку раз, до полного понимания.
Нежелание разобраться в вопросе - это порок, потому я буду жёсток.
Цитата(Stalker27 @ Jul 10 2012, 08:55)

1.Возможно стоит использовать активацию и деактивацию памяти (AT45_Check_ON/OFF) только в AT45_Full_Erase перед и после while, а в AT45_Block_Erase и в AT45_Ready_Wait убрать их? Или тут принципиально?
Тут наблюдается полное непонимание принципов работы интерфейса SPI. В отсутствие активного сигнала CS, все выходы подчиненного устройства переводятся в 3е состояние, т.е. устройство полностью отключается от шины. Думаю дальше не нужно объяснять?
Цитата(Stalker27 @ Jul 10 2012, 08:55)

2.Как найти оптимальную задержку delay_us в AT45_Ready_Wait? Или ее стоит убрать вообще как в at45db161.rar?
А зачем её искать? Попробуйте понять что будет в результате выполнения функции AT45_Ready_Wait и как тоже самое реализовано в at45db161.rar.
Цитата(Stalker27 @ Jul 10 2012, 08:55)

3.0x80 и 1<<SPIF одно и то же? Если да то сточку read_data & 0x80 можно так же записать read_data & (1<<SPIF) ?
Проверьте, что такое SPIF и что такое read_data & 0x80. Может быть число получится и одинаковое, но легко ли будет понять что делает этот кусок кода? Здесь более уместной будет подобная запись read_data & (1<<AT45_STATUS_FLAG_BUSY), не правда ли, из такой записи и без комментариев понятно, что мы ожидаем получить?. Учитесь писать самодокументируемый код.
Цитата(Stalker27 @ Jul 10 2012, 08:55)

4.В каком случае правильнее активируется память?
SPI_PORT &= ~(1<<DF_CHIP_SELECT);
SPI_PORT &= ~( (1<<DF_CHIP_SELECT)|(1<<SCK)|(1<<MOSI) );
Если Вы используете аппаратный SPI, то однозначно надо использовать первый вариант. Не знаю, откуда Вы второй взяли? Могу предположить что он используется в варианте программной реализации SPI.
Цитата(Stalker27 @ Jul 10 2012, 08:55)

5.В AT45_Block_Erase нашел отличия в исходниках в одной строчке (стоит коммент) 0x3F&(u8_t)(block>>6). Это правильно?
Вот тут надо не различия искать, а прочитать в даташите, как же правильно сделать.
Цитата(Stalker27 @ Jul 10 2012, 08:55)

6.В файле at45_defines.h из архива at45db161.rar реализовано 2 варианта кодов, как воспользоваться этим SPI_MODE_0_3 ?
Тут тоже пробел в Ваших знаниях. Интерфейс SPI может работать в 4х режимах, которые называются не затейливо, режимы 0, 1, 2 и 3. Режим устанавливается при настройке мастера SPI. АТ45 может работать только в 0 и 3 и автоматически определает который используется в данный момент. Соответствено, после настройки мастера Вы должны указать библиотеке, какой же режим Вы настроили, для этого и используется этот дефайн.
Чтобы писать хорошие программы, надо сперва читать документацию. Я надеюсь, что из Вам помогут мои советы.