Алгоритм, по идее, не слишком сложный. Нижесказанное ссылается на
описание битов, взятое из даташита.
Шлём по шине пачку данных:
Регистр 0 (02H):RDA5807_DHIZ = 1 - включаем аудиовыход
RDA5807_DMUTE = 0 - отключаем режим MUTE
RDA5807_SEEKUP = 1 - поиск вверх по диапазону
RDA5807_SEEK = 1 - старт поиска
Регистр 1 (02L):RDA5807_SKMODE = 1 - останавливаем поиск по достижении конца диапазона
RDA5807_ENABLE = 1 - включен радиомодуль
Регистр 2 (03H) - стартовая частота
Регистр 3 (03L):Биты 7-6 - стартовая частота
RDA5807_DIRECT_MODE = 0 - режим прямого ввода частоты отключен
RDA5807_TUNE = 1 - смена частоты (RDA5807_TUNE = 0 удобно при смене только громкости)
Биты 3-2 - нужный диапазон (например, RDA5807_BAND_US_EUROPE)
Биты 1-0 - нужный шаг перестройки (например, RDA5807_SPACE_50)
Регистр 6 - (05H):Биты 3-1 - уровень приёма (RDA5807_SEEKTH), при котором автопоиск останавливается.
Остальные биты и регистры - по необходимости.
После посылки указанного пакета тюнер начнёт автопоиск и остановится, если найдёт достаточную по уровню сигнала станцию или достигнет конца выбранного диапазона. В это время в цикле можно читать регистры, и на основании следующих данных принимать решение что делать:
Регистр 0 (0AH):RDA5807_STC = 1 - поиск завершён
RDA5807_SF = 1 - ошибка при поиске
Биты 1-0 - текущая частота
Регистр 1 (0AL) - текущая частота
Регистр 2 (0BH):RDA5807_RSSI (Биты 7-1) - уровень сигнала
RDA5807_FM_TRUE = 1 - на текущей частоте есть сигнал станции.
В автоматическом режиме, читая эти данные, контроллер может понять что делать - сохранить текущую частоту в память или пропустить сохранение, после чего, если конец диапазона ещё не достигнут, продолжить сканирование, начиная уже с этой частоты, если же достигнут - остановиться.
В полуавтоматическом режиме, когда решение принимает не контроллер, а человек, всё становится чуть проще - достаточно читать только текущую частоту. То есть, когда автопоиск остановился, мы либо сохраняем станцию, либо нет, после чего вычитываем текущую частоту и запускаем кнопкой новый алгоритм поиска, уже начиная с неё.
В любом случае, читать текущую найденную частоту по шине I²C необходимо, чтобы продолжить поиск. Одной записью тут не обойтись.
В своих проектах я режим автопоиска не использовал, так как эксперименты показали, что работает он не очень хорошо - пропускает некоторые станции и, наоборот, сохраняет частоты с шумами. Хотя, может быть, мне просто не повезло с условиями приёма, и в других случаях всё будет хорошо - не знаю.