ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
27 апреля
1387748 Топик полностью
LightElf (29.12.2023 16:33, просмотров: 120) ответил LightElf на "Сводный системный топик" :-) по китайской микрухе CH579. Предлагаю сюда добавлять кто чего нарыл. Для начала гугл-перевод даташита (побит на две части).
Внезапно обнаружил, что англоязычный даташит на сайте WCH для сабжевой микрухи не содержит описания некоторых регистров Ethernet (таблица хэшей и фильтр приема пакетов). Выше есть перевод китайского даташита, в котором эти регистры описаны. Фильтрация по хэшу у меня, вроде как, работает вот таким макаром (на базе китайского разъяснения): 
typedef uint8_t  eth_addr_t[6];
#define HASH_POLY 0x04C11DB7UL static uint8_t hash_crc(const eth_addr_t mac) { uint8_t c; uint32_t crc = 0xFFFFFFFF; int byte, bit; for (byte = 0; byte < 6; byte++) { c = mac[byte]; for (bit = 0; bit < 8; bit++) { crc = (crc << 1) ^ ((((crc >> 31) ^ c) & 0x01) ? HASH_POLY : 0); c >>= 1; } } crc >>= 26; return (uint8_t)crc; } int32_t eth_add_mac(const eth_addr_t hwaddr) { uint8_t hash; hash = hash_crc(hwaddr); if (hash > 31) { hash -= 32; R32_ETH_HTH |= (1 << hash); } else { R32_ETH_HTL |= (1 << hash); } R8_ETH_ERXFCON |= RB_ETH_ERXFCON_HTEN; // success return 0; }
Не надо делать мне как лучше, оставьте мне как хорошо