Skip to main content

// application note

AN0015 Setting the I2C SCL duty cycle and an exact bus frequency with the Binho Supernova and Pulsar

Some I2C targets, and some qualification plans, care how each SCL period is split between high and low, not only how many periods there are per second. Adapter firmware 4.6.0 and pyCosmicSDK 1.6.0 let a Binho Supernova or Pulsar set that split directly, from 20 to 80 percent high in steps of 10, and setting it also makes the bus frequency exact rather than rounded. This note explains the call, supplies a script that applies a ratio and prints what the adapter reports, and gives the ratios measured on the wire at 100 kHz and 400 kHz with a logic analyzer.

Products
Binho SupernovaBinho Pulsar
Protocols
I2C
Topics
Bus Timing
Revision
Rev 1.0 · November 6, 2026

// outcomes

What you'll walk away with

This document covers:

  • what I2cController.set_duty_cycle does and what it leaves alone
  • the ratios firmware accepts, and what it answers for the ones it refuses
  • why setting a ratio also makes the frequency exact
  • a script that applies a ratio, generates traffic to measure, and prints what the adapter reports
  • the split measured on the wire at 100 kHz and 400 kHz

It does not cover ratios outside 20 to 80 percent, duty-cycle control on the Supernova's I3C port, or SPI. SPI clock timing is a separate firmware change.

// background

Background

An I2C controller chooses a high time and a low time for every SCL period. The I2C specification sets minimums for both (tHIGH and tLOW), and most controllers pick a split on their own. That is fine until a target is sensitive to it, or until a test plan asks for a specific split: a 30:70 clock to check that a target samples correctly with a short high phase, or a 40:60 clock to match the timing of the system the target will ship in.

Until now the Binho adapters chose the split themselves. At 100 kHz the default is about 46 percent high; at 400 kHz, about 40 percent. There was no way to ask for another. Adapter firmware 4.6.0 and pyCosmicSDK 1.6.0 add one call that sets it.

// applicable devices

Applicable devices

Adapter Identifier Basis
Binho Supernova hardware revision C, firmware 4.6.0 pre-release build 80cbb484 measured, this document
Binho Pulsar hardware revision C, firmware 4.6.0 pre-release build ea77618b measured during firmware validation, within 1 percent of the Supernova; not re-measured for this document
Either adapter firmware 4.5.1 or earlier refuses the call with FW_UNSUPPORTED_COMMAND

Note: this revision was written against pre-release builds. The firmware reports its version as 4.5.1 with a build suffix because the version string had not yet been moved to 4.6.0. The call and its behavior are those of the 4.6.0 release.

// what's covered

What's covered in the note

  1. 01 Introduction
  2. 02 System overview
  3. 03 Hardware setup
  4. 04 Software setup
  5. 05 The duty-cycle call
  6. 06 Procedure
  7. 07 Measured results
  8. 08 Troubleshooting

The full procedure, measured results, and reference code are in the PDF and the assets archive.

// materials

What you'll need

Binho Supernova Binho Supernova USB host adapter for I3C, I2C, SPI & UART View product Binho Pulsar Binho Pulsar USB host adapter for I2C, SPI, UART, GPIO & CAN-FD View product
Software Mission Control 3 or the Cosmic SDK (Python, C / C++ / C#). Get the software
Files The reference scripts and assets used in this note. Download the assets

// trusted by engineering teams at

+ hundreds more

// newsletter

Get new application notes

New notes, firmware releases, and tool updates from Binho. No spam, unsubscribe anytime.

Put it on the bench

Every step in AN0015 was run on Binho Supernova and Binho Pulsar. Get the hardware to reproduce it, or talk to our engineers about your I2C bring-up.