

The SC16IS752 is a dual-channel I2C/SPI to UART bridge designed to facilitate serial communication between microcontrollers and other devices. It provides a high-speed UART interface with programmable baud rates, making it suitable for a wide range of embedded system applications. The component supports both I2C and SPI protocols, offering flexibility in communication interfaces.








| Pin Number | Pin Name | Description |
|---|---|---|
| 1 | A0 | I2C address selection or SPI chip select |
| 2 | A1 | I2C address selection or SPI chip select |
| 3 | RESET | Active-low reset input |
| 4 | XTAL1 | Crystal oscillator input or external clock input |
| 5 | XTAL2 | Crystal oscillator output |
| 6 | VSS | Ground |
| 7 | TXB | UART channel B transmit output |
| 8 | RXB | UART channel B receive input |
| 9 | RTSB | UART channel B request-to-send output |
| 10 | CTSB | UART channel B clear-to-send input |
| 11 | GPIO0 | General-purpose I/O pin |
| 12 | GPIO1 | General-purpose I/O pin |
| 13 | GPIO2 | General-purpose I/O pin |
| 14 | GPIO3 | General-purpose I/O pin |
| 15 | GPIO4 | General-purpose I/O pin |
| 16 | GPIO5 | General-purpose I/O pin |
| 17 | GPIO6 | General-purpose I/O pin |
| 18 | GPIO7 | General-purpose I/O pin |
| 19 | CTSA | UART channel A clear-to-send input |
| 20 | RTSA | UART channel A request-to-send output |
| 21 | RXA | UART channel A receive input |
| 22 | TXA | UART channel A transmit output |
| 23 | VSS | Ground |
| 24 | VCC | Power supply input |
| 25 | SCL/SCLK | I2C clock input or SPI clock input |
| 26 | SDA/MOSI | I2C data input/output or SPI master-out/slave-in |
| 27 | A2/MISO | I2C address selection or SPI master-in/slave-out |
| 28 | CS | SPI chip select (active low) |
#include <Wire.h>
// SC16IS752 I2C address (A0, A1, A2 = 0)
#define SC16IS752_ADDR 0x48
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Initialize Serial Monitor for debugging
// Initialize SC16IS752
Wire.beginTransmission(SC16IS752_ADDR);
Wire.write(0x03); // Write to the LCR (Line Control Register)
Wire.write(0x80); // Enable access to the baud rate registers
Wire.endTransmission();
Wire.beginTransmission(SC16IS752_ADDR);
Wire.write(0x00); // DLL (Divisor Latch LSB)
Wire.write(0x1A); // Set baud rate to 9600 (assuming 14.7456 MHz clock)
Wire.endTransmission();
Wire.beginTransmission(SC16IS752_ADDR);
Wire.write(0x01); // DLM (Divisor Latch MSB)
Wire.write(0x00); // Set baud rate to 9600
Wire.endTransmission();
Wire.beginTransmission(SC16IS752_ADDR);
Wire.write(0x03); // Write to the LCR again
Wire.write(0x03); // 8 data bits, no parity, 1 stop bit
Wire.endTransmission();
Serial.println("SC16IS752 initialized.");
}
void loop() {
// Example: Send data to UART channel A
Wire.beginTransmission(SC16IS752_ADDR);
Wire.write(0x00); // THR (Transmit Holding Register) for channel A
Wire.write('H'); // Send character 'H'
Wire.endTransmission();
delay(1000); // Wait 1 second
}
No Communication with the SC16IS752:
UART Data Loss or Corruption:
Device Not Responding After Power-Up:
GPIO Pins Not Functioning:
Can the SC16IS752 operate at 5V?
What is the maximum UART baud rate?
Can I use both I2C and SPI simultaneously?