trudno powiedzieć czy wszystko ok nie widząc ciała funkcji "TWI_write/read_bufor" ale pierwsze co rzuca sie w oczy to to:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
kod BCD służy do zapisu pojedynczych cyfr dziesiętnych w jednym bajcie, ty prubujesz upchać np 19 w jednym bajcie co jest niemożliwe bo są to dwie cyfry dziesiętne więc muszą zajmować dwa bajty w BCD, oczywiście są implementacje umożliwiające zapis BCD dwóch cyfr dziesiętnych w jednym bajcie, ale nie wiem czy w tym przypadku to jest możliwe (obsługiwane przez funkcję dec2bcd).
Tak czy inaczej pierwsze dwie komórki tablicy bufora powinny zostać napełnione prawidłowo, a skoro nie są to problemu bym szukał w funkcjach zapisu/odczytu eeproma.
Te funkcje naskrobałeś sam czy masz z jakiegoś źródła? Bo widzisz z tymi pamięciami jest pewien problem, a mianowicie ich cała rodzina nie ma jednorodnego protokołu komunikacji ze względu na różną długość adresu potrzebnego do zaadresowania całej przestrzeni pamięci. I tak np kość 24c02 ma pojemność 2048 bitów, a komórki są 8 bitowe więc komórek jest 256, wiec adres ostatniej komórki to 255, czyli dokładnie jeden bajt. Pamięć której użyłeś ma pojemność 512*1024=524288, dzieląc przez 8 otrzymujemy 65536 komórek pamięci, a do zaadresowania ostatniej potrzeba dwóch bajtów. A to nie koniec niespodzianek. Pamięci których pojemność wymaga niepełnych dwóch bajtów są tak pokręcone że część adresu komórki która "wystaje" poza pierwszy bajt jest upychana w miejsce adresu sprzętowego (te kości mają albo ograniczoną możliwość zmiany adresu albo nie mają tej możliwości wcale).
Podsumowując, może być tak, że funkcje których używasz, były napisane pod inny rozmiar pamięci i twoją kostko nie chcą poprawnie gadać.