

The SC16IS752, manufactured by NXP, 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 configurable baud rates and supports both I2C and SPI protocols, making it a versatile solution for embedded systems. This component is particularly useful in applications requiring multiple UART interfaces but limited microcontroller resources.








The SC16IS752 is available in multiple packages. Below is the pin configuration for the TSSOP-28 package:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1 | A0 | I2C address selection or SPI chip select (CS) |
| 2 | A1 | I2C address selection |
| 3 | RESET | Active-low reset input |
| 4 | XTAL1 | Crystal oscillator input or external clock input |
| 5 | XTAL2 | Crystal oscillator output |
| 6 | VSS | Ground |
| 7 | TXD0 | UART0 transmit data |
| 8 | RXD0 | UART0 receive data |
| 9 | RTS0 | UART0 request to send |
| 10 | CTS0 | UART0 clear to send |
| 11 | TXD1 | UART1 transmit data |
| 12 | RXD1 | UART1 receive data |
| 13 | RTS1 | UART1 request to send |
| 14 | CTS1 | UART1 clear to send |
| 15 | GPIO0 | General-purpose I/O pin |
| 16 | GPIO1 | General-purpose I/O pin |
| 17 | GPIO2 | General-purpose I/O pin |
| 18 | GPIO3 | General-purpose I/O pin |
| 19 | GPIO4 | General-purpose I/O pin |
| 20 | GPIO5 | General-purpose I/O pin |
| 21 | GPIO6 | General-purpose I/O pin |
| 22 | GPIO7 | General-purpose I/O pin |
| 23 | SCL/SCLK | I2C clock or SPI clock |
| 24 | SDA/MOSI | I2C data or SPI master out/slave in |
| 25 | MISO | SPI master in/slave out |
| 26 | IRQ | Interrupt request output |
| 27 | VCC | Power supply input |
| 28 | A2 | I2C address selection |
#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
// Initialize SC16IS752
Wire.beginTransmission(SC16IS752_ADDR);
Wire.write(0x03); // Write to the FCR (FIFO Control Register)
Wire.write(0x07); // Enable FIFO, clear TX/RX FIFO
Wire.endTransmission();
Serial.println("SC16IS752 Initialized");
}
void loop() {
// Example: Send data to UART0
Wire.beginTransmission(SC16IS752_ADDR);
Wire.write(0x00); // THR (Transmit Holding Register) for UART0
Wire.write('H'); // Send character 'H'
Wire.endTransmission();
delay(1000); // Wait 1 second
}
No Communication with the SC16IS752:
UART Data Loss:
Interrupts Not Triggering: